Chcę użyć R do podsumowania danych liczbowych w tabeli z nieunikalnymi rownames do tabeli wyników z unikalnymi nazwami wierszy z wartościami podsumowanymi za pomocą niestandardowej funkcji . Logika podsumowania jest następująca: użyj średniej wartości, jeśli stosunek wartości maksymalnej do minimalnej wynosi < 1.5, w przeciwnym razie użyj mediany. Ponieważ tabela jest bardzo duża, próbuję użyć funkcji stop() i funkcji rzutowania (cast) w pakiecie reshape2.Błąd z niestandardową funkcją agregującą dla wywołania cast() w R 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)
Ostatni wiersz powyższego kodu powoduje wyświetlenie komunikatu o błędzie.
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
Co robię źle? Zauważ, że jeśli funkcja podsumowania miała po prostu zwrócić min() lub max(), nie ma błędu, mimo że pojawia się komunikat ostrzegawczy "brak brakujących argumentów". Dziękuję za wszelkie sugestie.
(Rzeczywista stół Chcę pracować to 200x10000 jeden).
Dziękuję za uwagę i pomoc. – user594694