这可能是一个简单的问题,但我刚开始学习如何使用R。
我有一个填充了包含数字的列的csv文件。对于每一列数字,我希望R进行Shapiro-Wilks正态性检验。所以,我想从左到右遍历列,以便进行shapiro.test(file$column1), shapiro.test(file$column2)
等等。
所有列都有一个名称作为标题,并且它们不包含相同的行数。
我该怎么办?非常感谢提前!
答案 0 :(得分:4)
尝试
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