1

間違いを見るには疲れすぎていると思います。「for」ループから 2 つのデータセットの最大値を取得する関数を作成しました。

plot_zu <- function(x) {for (i in 1:x){
    z=data_raw[grep(a[i], data_raw$Gene.names),]
    b=data_raw_ace[grep(a[i], data_raw_ace$Gene.names),]
    p<-vector("numeric", length(1:length(a)))
    p[i]<-max(z$t_test_diff)
    return(p)} 
}

想像してみてください: a は名前のベクトルであり、データセット(data_raw(_ace))はそれによってフィルタリングされます。t_test_diff最後に、列のすべての最大値をベクトルにしたいと思います。その後、t_test_diffdata_raw_ace からも列の値を追加したいと思います。

問題は、私がこれを取得することです:

[1] 1.210213 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
[8] 0.000000 0.000000

したがって、括弧または何かに問題がありますが、表示できません(最初の値が適合します)。良い例でなくて申し訳ありませんが、理解しやすく、解決しやすい質問だと思います。

必要に応じて、別の例を追加できます。

どうもありがとう!!

ありがたいことに、

ヘンドリック

4

3 に答える 3

1

データがなく、この関数を呼び出していない場合でも、試みていると思われることに基づいて代替手段を提供します。「a」で定義されたセットに「Gene.names」列の値がある「data_raw」の行のみを選択したいようです。もしそうなら、それはただ:

 z <- data_raw[ data_raw$Gene.names %in% a , ]  # no loop needed

 b <- data_raw_ace[ data_raw_ace$Gene.names %in% a , ] # again no loop needed
 # Next step is unclear

"[" 内で grep または grep を使用する場合は、sapply を使用します。

 z <- data_raw[ sapply(a, grep, x= data_raw$Gene.names), ]  # (still) no loop needed
 b <- data_raw_ace[ sapply(a, grep, x= data_raw_ace$Gene.names),  ]

あなたがこれを行うとき、それは何が望まれているのですか?

p<-vector("numeric", length(1:length(a)))
p[i]<-max(z$t_test_diff)

データの 2 つのサブセットで同じ名前の列の最大値が必要な場合は、次のようにします。

p <- pmax( z$t_test_diff, b$t_test_diff )

上記のさらなるコメントに基づいて、私は(今)おそらく次のように思います:

p <- apply( cbind(z$t_test_diff), abs(b$t_test_diff), 1, function(x) x[which.max(abs(x))])
于 2012-12-02T19:14:07.403 に答える
0

ループ内で p を定義することにより、新しい反復ごとに p を上書きしているようです。

于 2012-12-02T17:28:20.153 に答える
0

vapplyforこれを行い、ループを排除します。未検証。

vapply(1:x, FUN.VALUE=numeric(1), FUN=function(x) {
    z=data_raw[grep(a[i], data_raw$Gene.names),]
    b=data_raw_ace[grep(a[i], data_raw_ace$Gene.names),]  # Is this needed?

    return(max(z$t_test_diff))
})
于 2012-12-02T17:17:42.013 に答える