2017-08-01 3 views
0

forchループでoutliersパッケージのcochran.test関数を使用したいので、関数の数式の引数にいくつかの変数をループすることができます:R:forループでcochran.testを使用する

library(outliers) 

# generating test data 
data <- 
data.frame(c(1,1,1,2,2,2),c(1,2,3,1,2,4),c(1,2,3,1,2,4),c(1,2,3,1,2,4)) 
colnames(data) <- c("group", "firstvar", "secondvar", "thirdvar") 
data$group <- as.factor(data$group) 
variables <- c("firstvar", "secondvar", "thirdvar") 

# works without loop 
cochran.test(firstvar~group,data) 

# doesn't work in a loop 
for (i in variables) { 
    cochran.test(i~group,data) 
} 

最初の例は正常に動作しますが、ループは動作しません。代わりに、私は、次のエラーを取得する:

Error in tapply(data[[bn[1]]], by.factor, var) : 
    arguments must have same length 

答えて

1

使用as.formula変数としてiを用いてループ内の所望のy〜X式を定義する:

library(outliers) 

# generating test data 
data <- 
    data.frame(c(1,1,1,2,2,2),c(1,2,3,1,2,4),c(1,2,3,1,2,4),c(1,2,3,1,2,4)) 
colnames(data) <- c("group", "firstvar", "secondvar", "thirdvar") 
data$group <- as.factor(data$group) 
variables <- c("firstvar", "secondvar", "thirdvar") 

# works in a loop 
for (i in variables) { 
    print(cochran.test(as.formula(paste(i,'~group')),data)) 
} 

## Cochran test for outlying variance 
## 
## data: as.formula(paste(i, "~group")) 
## C = 0.7, df = 3, k = 2, p-value = 0.6 
## alternative hypothesis: Group 2 has outlying variance 
## sample estimates: 
##  1  2 
## 1.000000 2.333333 
## 
## 
## Cochran test for outlying variance 
## 
## data: as.formula(paste(i, "~group")) 
## C = 0.7, df = 3, k = 2, p-value = 0.6 
## alternative hypothesis: Group 2 has outlying variance 
## sample estimates: 
##  1  2 
## 1.000000 2.333333 
## 
## 
## Cochran test for outlying variance 
## 
## data: as.formula(paste(i, "~group")) 
## C = 0.7, df = 3, k = 2, p-value = 0.6 
## alternative hypothesis: Group 2 has outlying variance 
## sample estimates: 
##  1  2 
## 1.000000 2.333333 
関連する問題