Я хочу использовать R для суммирования числовых данных в таблице с неуникальными именами строк в таблицу результатов с уникальными именами строк со значениями, суммированными с помощью пользовательской функции. Логика резюмирования такова: используйте среднее значение, если отношение максимального значения к минимальному <1,5, иначе используйте медианное значение. Поскольку таблица очень большая, я пытаюсь использовать функции melt () и cast () в пакете reshape2 .
# example table with non-unique row-names tab <- data.frame(gene=rep(letters[1:3], each=3), s1=runif(9), s2=runif(9)) # melt tab.melt <- melt(tab, id=1) # function to summarize with logic: mean if max/min < 1.5, else median summarize <- function(x){ifelse(max(x)/min(x)<1.5, mean(x), median(x))} # cast with summarized values dcast(tab.melt, gene~variable, summarize)
Последняя строка кода выше приводит к сообщению об ошибке.
Error in vapply(indices, fun, .default) : values must be type 'logical', but FUN(X[[1]]) result is type 'double' In addition: Warning messages: 1: In max(x) : no non-missing arguments to max; returning -Inf 2: In min(x) : no non-missing arguments to min; returning Inf
Что я делаю неправильно? Обратите внимание, что если бы функция суммирования просто возвращала min () или max (), ошибки не было, хотя есть предупреждающее сообщение о том, что «нет непустых аргументов». Спасибо за любое предложение.
(Фактическая таблица, с которой я хочу работать, - это таблица размером 200x10000. )