ループでは、関数内にあるため、自動印刷はオフになっています。print
出力を見たい場合は、どちらの場合も明示的に何かをする必要があります。取得しているの[1] 9
は、の値を明示的に出力しているためですy
。
以下は、これを実行することを検討する方法の例です。
> DF <- data.frame(A = rnorm(100), B = rlnorm(100))
> y <- 1
> shapiro.test(DF[,y])
Shapiro-Wilk normality test
data: DF[, y]
W = 0.9891, p-value = 0.5895
そのため、自動印刷があります。ループでは、これを行う必要があります。
for(y in 1:2) {
print(shapiro.test(DF[,y]))
}
より多くのテストを出力したい場合は、ループ内に余分な行として追加してください:
for(y in 1:2) {
writeLines(paste("Shapiro Wilks Test for column", y))
print(shapiro.test(DF[,y]))
writeLines(paste("Anderson Darling Test for column", y))
print(ad.test(DF[,y]))
}
しかし、大量の出力を読むのが好きでない限り、それはあまり魅力的ではありません。代わりに、当てはめたテスト オブジェクトを保存してから、それらを印刷して調査し、場合によってはそれらを処理して、テスト統計と p 値をテーブルに集計してみませんか? ループを使用してそれを行うことができます:
## object of save fitted objects in
obj <- vector(mode = "list", length = 2)
## loop
for(y in seq_along(obj)) {
obj[[y]] <- shapiro.test(DF[,y])
}
次に、次を使用してモデルを確認できます
> obj[[1]]
Shapiro-Wilk normality test
data: DF[, y]
W = 0.9891, p-value = 0.5895
たとえば、または usinglapply
を使用して、結果を保存するために使用するオブジェクトをセットアップします。
> obj2 <- lapply(DF, shapiro.test)
> obj2[[1]]
Shapiro-Wilk normality test
data: X[[1L]]
W = 0.9891, p-value = 0.5895
W
とデータを抽出したいとしp-value
ます。すべての結果を格納するオブジェクトを処理して、必要なビットを抽出できます。たとえば、次のようになります。
> tab <- t(sapply(obj2, function(x) c(x$statistic, x$p.value)))
> colnames(tab) <- c("W", "p.value")
> tab
W p.value
A 0.9890621 5.894563e-01
B 0.4589731 1.754559e-17
または重要な星が好きな人のために:
> tab2 <- lapply(obj2, function(x) c(W = unname(x$statistic),
+ `p.value` = x$p.value))
> tab2 <- data.frame(do.call(rbind, tab2))
> printCoefmat(tab2, has.Pvalue = TRUE)
W p.value
A 0.9891 0.5895
B 0.4590 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
これは、画面に出力を送信してから流し込むよりも優れている必要がありますか?