0

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

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

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

我该怎么办?提前谢谢了!

4

1 回答 1

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
于 2013-09-23T15:39:26.827 回答