下面是一个工作的R脚本。我想要anova数据帧,dfa,然后dfb -但是aov函数只读取第一个数据帧。我已经找过了,但没有找到解决办法。更重要的是,脚本易于阅读,而不是计算效率。如何使aov遍历数据帧?提前谢谢。
#two dummy data frames
Obs <- c(1,2,1,4,5,6) ;Treat <- c(1,1,1,2,2,2)
dfa <- data.frame(Obs=Obs, Treat=Treat)
Obs2 <- c(10,22,10,43,52,60)
dfb <- data.frame(Obs=Obs2, Treat=Treat)
Names <- c("dfa","dfb")
# Loop here but cannot get it to work with calling data frame names just repeats first analysis - dfb has quite different values
for(i in 1:2) {
print(summary(aov( Obs ~ Treat, data=as.data.frame(Names[i]))))
print(Names[i])
}发布于 2015-02-10 14:13:39
你可以试试
Map(function(x) summary(aov(Obs~Treat,data=x)) , mget(Names))或
lapply(mget(Names), function(x) summary(aov(Obs~Treat, data=x)))如果您需要一个函数也可以更改“调用”公式中的“数据”。
f1 <- function(formula= as.formula('Obs~Treat'), data, ...){
Call <- match.call(expand.dots=TRUE)
Call[[1]] <- as.name('aov')
Call$formula <- as.formula(terms(formula))
Call$data <- as.symbol(substitute(nm, list(nm=data)))
eval(Call)
}
Map(function(x,y) f1(data=y), mget(Names), Names)
#$dfa
#Call:
#aov(formula = Obs ~ Treat, data = dfa)
#Terms:
# Treat Residuals
#Sum of Squares 20.166667 2.666667
#Deg. of Freedom 1 4
#Residual standard error: 0.8164966
#Estimated effects may be unbalanced
#$dfb
#Call:
#aov(formula = Obs ~ Treat, data = dfb)
#Terms:
# Treat Residuals
# Sum of Squares 2128.1667 240.6667
#Deg. of Freedom 1 4
#Residual standard error: 7.756718
#Estimated effects may be unbalancedhttps://stackoverflow.com/questions/28431697
复制相似问题