2011-04-05 115 views
0

我有以下数据集1:R:通过迭代变量

Height | Group 
1,556 | A 
2,111 | B 
1,556 | A 
2,341 | B 
1,256 | A 
2,411 | B 

我想通过可变组

myvar <- c("Height") 

res<- vector("list", length(myvars)) 

a <- factor(dataset1$Group) 
myfactor <- levels(a) 

i=1 
for (myfactor in dataset1) { 
    res[[i]] <- shapiro.test(dataset1$Size) 
    i=i+1 
} 

RES计算夏皮罗威尔克正态性检验为高度 - 返回n组测试,但都具有相同的p值和W. 任何人都可以帮我弄清楚什么是错的?

回答

3

编写新代码比查找代码中的所有错误更容易。

lapply(split(dataset1$Height,dataset1$Group),shapiro.test) 

$` A` 

     Shapiro-Wilk normality test 

data: X[[1L]] 
W = 0.75, p-value = 3.031e-08 


$` B` 

     Shapiro-Wilk normality test 

data: X[[2L]] 
W = 0.9134, p-value = 0.4295 
3

你的代码是多种方式。这里有几个:

  1. 创建myfactor之外循环的,但后来你把它的迭代器。
  2. dataset1是你的数据(data.frame?)。我甚至不确定什么myfactor将在由for (myfactor in dataset1)创建的循环内。
  3. 您不会将数据发送到shapiro.test
  4. myvars没有定义,dataset1$Size应该可能是dataset1$Height

试试这个。

res <- list() 
for (mf in levels(dataset1$Group)) { 
    res[[mf]] <- shapiro.test(dataset1$Height[dataset1$Group == mf]) 
} 
1

感谢您的回复。
对于未来的公告:
如果要计算(用于数据集中的选定变量)一个正态性检验的因素:

variaveis <- colnames(dataset1)[c(1:2)] 
/////alternative: variaveis <- c("height", "weight") 
res<- vector("list", length(variaveis)) 

for (i in 1:length(variaveis)) { 
    #calcula o shapiro por factor para variaveis selecionadas 
    res[[i]] <- lapply(split(dataset1[,variaveis[i]] ,dataset1$sex), shapiro.test) 
} 
res 

PS:性别= GROUP在前面的例子
再次感谢
希望此代码有助于减少代码 M.