循环遍历R中的csv-file列

时间:2013-09-23 15:37:44

标签: r for-loop

这可能是一个简单的问题,但我刚开始学习如何使用R。

我有一个填充了包含数字的列的csv文件。对于每一列数字,我希望R进行Shapiro-Wilks正态性检验。所以,我想从左到右遍历列,以便进行shapiro.test(file$column1), shapiro.test(file$column2)等等。

所有列都有一个名称作为标题,并且它们不包含相同的行数。

我该怎么办?非常感谢提前!

1 个答案:

答案 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