Rを使用して、一意でないrownamesを持つテーブルの数値データを、一意の行名とカスタム関数を使用して集計した結果テーブルに要約したい。要約ロジックは、最大値と最小値の比が< 1.5の場合は平均値を使用し、それ以外の場合は中央値を使用します。テーブルが非常に大きいので、私はreshape2パッケージのmelt()とcast()関数を使用しようとしています。R reshape2のcast()呼び出しのカスタム集計関数でエラーが発生する
# 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()を返すだけであった場合、 'no-missing arguments'に関する警告メッセージが表示されますが、エラーはありません。ご意見ありがとうございます。
は(私が仕事をしたい、実際のテーブルが200x10000 1である。)
これを調べて助けていただきありがとうございます。 – user594694