0

私は2つのデータフレームを持っています:

D9 <- as.data.frame(DF$As,DF$Cd,DF$Cu,DF$Cr,DF$Ni,DF$Pb,DF$Zn)
D10 <- as.data.frame(DO$As,DO$Cd,DO$Cu,DO$Cr,DO$Ni,DO$Pb,DO$Zn)

そして、各列 (DF$As、DO$As) などに wilcox テストを適用します。次のコードを試しました:

lapply(ncol(D9), function(i) {wilcox.test((D9[,i]),(D10[,i]))})

出力は次のとおりです。

[[1]]
Wilcoxon rank sum test
data:  (D9[, i]) and (D10[, i])
W = 107, p-value = 0.9834
alternative hypothesis: true location shift is not equal to 0

だから私の質問は - 私が間違っているのは何ですか?

どんな助けでも大歓迎です。

4

4 に答える 4

1

ncol(D9)は単一の数値のみを返すため、lapplyその単一の数値に対してのみ反復処理を行うことに注意してください。を使用1:ncol(D9)して最初の列から開始します (または を使用しますseq.int(ncol(D9))。 と の違いを参照してくださいlapply(9, print))lapply(1:9, print)

代わりに、列を直接マップすることができます

Map(wilcox.test, D9, D10)

data.frames は実際には単なるリストであるためです。

于 2017-10-09T22:40:24.753 に答える
0

lapply にはベクトルが必要なので、@MrFlick の提案はおそらく役に立ちます (実際には wilcox テストを 1 回だけ実行しました)。

ループを介して繰り返し出力を取得することもできます

for(i in 1:ncol(D9)){
    summary(wilcox.text(D9[,i],D10[,i]))
}
于 2017-10-09T22:42:19.270 に答える