W pętli automatyczne drukowanie jest wyłączone, ponieważ znajduje się wewnątrz funkcji. W obu przypadkach musisz jawnie wpisać print
, jeśli chcesz zobaczyć dane wyjściowe. Dostarczane rzeczy to [1] 9
, ponieważ wyraźnie drukujesz wartości y
.
Oto przykład tego, jak warto rozważyć wykonanie tej czynności.
> 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
Mamy więc druk automatyczny. W pętli musielibyśmy to zrobić:
for(y in 1:2) {
print(shapiro.test(DF[,y]))
}
Jeśli chcesz wydrukować więcej testów na zewnątrz, a potem po prostu dodać je jako dodatkowe linie w pętli:
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]))
}
Ale to nie jest bardzo atrakcyjne, chyba że lubisz czytać rózne wyjścia. Zamiast tego, dlaczego nie zapisać dopasowanych obiektów testowych, a następnie można je wydrukować i zbadać, a może nawet przetworzyć je, aby zebrać statystyki testu i wartości p do tabeli? Można to zrobić za pomocą pętli:
## 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])
}
Możemy spojrzeć na modelach stosując
> obj[[1]]
Shapiro-Wilk normality test
data: DF[, y]
W = 0.9891, p-value = 0.5895
na przykład, albo przy użyciu lapply
, która dba o utworzenie obiektu używamy do zapamiętywania wyniki dla nas
> obj2 <- lapply(DF, shapiro.test)
> obj2[[1]]
Shapiro-Wilk normality test
data: X[[1L]]
W = 0.9891, p-value = 0.5895
teraz powiedzieć chciałem wyodrębnić dane z W
i p-value
możemy przetworzyć obiekt przechowujący wszystkie wyniki EXT ract bity chcemy np
> 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
Albo dla tych, z zamiłowaniem do gwiazdek istotności:
> 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
To ma być lepszy niż wypalanie wyjście do ekranu, który następnie trzeba wlać przez?
co to jest "i" - czy miałeś na myśli "y <- 1" w pierwszym wierszu? –