R を使用して、一意でない行名を持つテーブルの数値データを、カスタム関数を使用して要約された値を持つ一意の行名を持つ結果テーブルに要約したいと考えています。要約ロジックは次のとおりです。最小値に対する最大値の比率が 1.5 未満の場合は値の平均を使用し、それ以外の場合は中央値を使用します。テーブルが非常に大きいため、reshape2パッケージで Melt() および cast() 関数を使用しようとしています。
# 一意でない行名を持つテーブルの例 タブ <- data.frame(gene=rep(文字[1:3], each=3), s1=runif(9), s2=runif(9)) # 溶けた tab.melt <-melt(タブ、id=1) # ロジックで要約する関数: 最大/最小 < 1.5 の場合は平均、そうでない場合は中央値 要約 <- function(x){ifelse(max(x)/min(x)<1.5, mean(x), median(x))} # 集計値でキャスト dcast(tab.melt, 遺伝子~変数, 要約)
上記のコードの最後の行は、エラー通知になります。
vapply(indices, fun, .default) のエラー: 値は「論理」型でなければなりません。 しかし、FUN(X[[1]]) の結果は 'double' 型です さらに: 警告メッセージ: 1: max(x) : max に欠落していない引数はありません。-Inf を返す 2: in min(x) : min に欠落していない引数はありません。Inf を返す
私は何を間違っていますか?集計関数が単に min() または max() を返すだけの場合は、「欠落していない引数がない」という警告メッセージが表示されますが、エラーは発生しないことに注意してください。ご提案ありがとうございます。
(私が使用したい実際のテーブルは 200x10000 のものです。)