2011-07-08 12 views
4
>str(set) 
'data.frame': 1000 obs. of 6 variables: 
$ ID  : Factor .. 
$ a : Factor .. 
$ b: Factor .. 
$ c: Factor .. 
$ dat : num .. 
$ contrasts : Ord.factor .. 


>X 
[1] "a" "b" "c" 


for (i in 1 :length(X)){ 
    my=X[i] 
    f=as.formula(paste("dat~contrasts*", paste(my,"Error(ID/(contrasts))",sep="+"))) 
    sum = summary(aov (f, data =set)) 
} 

Xは非常に大きくなる可能性がありますので、for-loopではなくapply関数を考えていました。この場合は可能でしょうか?Anova forループ関数を適用する

私はこの試みた:

apply(
    as.matrix(X), 1, function(i){ 
    summary(aov(as.formula(paste("dat~contrasts*", 
     paste(i, "Error(ID/(contrasts))", sep="+"))), data=set)) 
    } 
) 

をしかし、これは意味がありません。誰でも助けてくれますか?

+3

'X'がベクトルの場合、' sapply'がより適切ですが、これは本質的にforループを書く単なる良い方法です。実際にコードを高速化することはありません。 –

+1

@Ashley:str()の情報を入れてよかったですが、おもしろいおもちゃのデータセットを私たちに渡してくれればさらに良いでしょう。また、http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

答えて

3

これはそれを行うべき:

# Sample data 
set <- data.frame(ID=1:10, a=letters[1:10], b=LETTERS[1:10], c=letters[10:1], 
        dat=runif(10), contrasts=ordered(rep(1:2, 5))) 
X <- letters[1:3] # a,b,c 

sapply(X, function(my) { 
    f <- as.formula(paste("dat~contrasts*",my,"+Error(ID/(contrasts))")) 
    summary(aov(f, data=set)) 
}, simplify=FALSE) 

注FALSE =簡素化とsapplyの使用。 lapplyを使うと動作しますが、リストコンポーネントに名前を追加することはありません。

+0

@ashleyも参照してください。答えが必要なものだった場合は、それを答えとしてください。また、あなたが好きな回答(および質問)をupvoteする必要があります。左上のスコアをクリックするだけです。 – Tommy

関連する問題