首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环数组并从列表中选择数据帧名称

循环数组并从列表中选择数据帧名称
EN

Stack Overflow用户
提问于 2015-02-10 12:27:18
回答 1查看 1.3K关注 0票数 0

下面是一个工作的R脚本。我想要anova数据帧,dfa,然后dfb -但是aov函数只读取第一个数据帧。我已经找过了,但没有找到解决办法。更重要的是,脚本易于阅读,而不是计算效率。如何使aov遍历数据帧?提前谢谢。

代码语言:javascript
复制
#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])
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-10 14:13:39

你可以试试

代码语言:javascript
复制
Map(function(x) summary(aov(Obs~Treat,data=x)) , mget(Names))

代码语言:javascript
复制
lapply(mget(Names), function(x) summary(aov(Obs~Treat, data=x)))

如果您需要一个函数也可以更改“调用”公式中的“数据”。

代码语言:javascript
复制
 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 unbalanced
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28431697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档