【问题标题】:R looping anova and pick data frame names from listR循环方差分析并从列表中选择数据框名称
【发布时间】:2015-02-10 12:27:18
【问题描述】:

下面是一个有效的 R 脚本。我想对数据帧 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])
}

【问题讨论】:

  • 另外,在您的代码中,这些值会在您创建 ObsTreat 对象时重复。结果可能来自summary(aov(Obs~Treat)) 的输出假设您创建了数据集而没有创建矢量对象dfa &lt;- data.frame(Obs=c(1,2,1,4,5,6), Treat=c(1,1,1,2,2,2)); dfb &lt;- data.frame(Obs=c(10,22,10,43,52,60), Treat=c(1,1,1,2,2,2)) 在运行循环时,Error in eval(expr, envir, enclos) : object 'Obs' not found
  • 哇,不一样了!无论如何,'function' 和 'lapply' 都有效,而且我还将变量名称更改为更独特的名称。
  • 对不起 - 我忘了 - 非常感谢!现在我将尝试使用这些知识。

标签: r variables anova


【解决方案1】:

你可以试试

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 unbalanced

【讨论】:

    猜你喜欢
    • 2015-08-30
    • 2021-09-15
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多