Анова, для цикла применить функцию - PullRequest
4 голосов
/ 08 июля 2011
>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(
  as.matrix(X), 1, function(i){
    summary(aov(as.formula(paste("dat~contrasts*",
      paste(i, "Error(ID/(contrasts))", sep="+"))), data=set))
  }
)

Но это не имеет смысла.Кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 08 июля 2011

Это должно сделать это:

# 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)

Обратите внимание на использование sapply с simpify = FALSE. Использование lapply также работает, но не добавляет имен в компоненты списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...