这可能是一个简单的问题,但我刚刚开始学习如何使用 R。
我有一个 csv 文件,其中填充了包含数字的列。对于每一列数字,我希望 R 进行 Shapiro-Wilks 正态性检验。所以,我想从左到右循环遍历列,如进行shapiro.test(file$column1), shapiro.test(file$column2)
等。
所有列都有一个名称作为它们的标题,并且它们不包含相同数量的行。
我该怎么办?提前谢谢了!
尝试
apply(file, 2, shapiro.test)
看看?apply
另一种方法是使用sapply
sapply(file, shapiro.test, simplify=FALSE)
也看看?sapply
airquality
使用数据集的示例
> data(airquality)
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
# Applying shapiro.test function
> Test <- apply(airquality, 2, shapiro.test)
# Showing results in a nice format
> sapply(Test, function(x) unlist(x[c( "statistic", "p.value")]))
Ozone Solar.R Wind Temp Month Day
statistic.W 8.786661e-01 9.418347e-01 0.9857501 0.976173252 8.880451e-01 9.531254e-01
p.value 2.789638e-08 9.493099e-06 0.1178033 0.009320041 2.258290e-09 5.047775e-05
> sapply(Test, function(x) c(x["statistic"], x["p.value"])) # same results as above
Ozone Solar.R Wind Temp Month Day
statistic 0.8786661 0.9418347 0.9857501 0.9761733 0.8880451 0.9531254
p.value 2.789638e-08 9.493099e-06 0.1178033 0.009320041 2.25829e-09 5.047775e-05