如何正确使用stack()函数提取R中ANCOVA的边缘均值?

如何正确使用stack()函数提取R中ANCOVA的边缘均值?,r,lapply,ancova,R,Lapply,Ancova,我是R的初学者,我想从200多个结果变量的ANCOVA测试中提取边际均值。当我只对一个结果变量使用stack()时,它运行良好,但当我同时使用stack()和lappy()时,我得到了错误 在这里,我使用内置的数据集“iris”来显示问题。 数据集“iris”在物种上有三个级别,我使用Petal.Width作为协变量,Species作为预测变量,前三列变量作为结果变量 我的目的是同时提取相应结果变量的多个边际均值,而不是逐个提取。 #load data and packages data(&qu

我是R的初学者,我想从200多个结果变量的ANCOVA测试中提取边际均值。当我只对一个结果变量使用
stack()
时,它运行良好,但当我同时使用
stack()
lappy()
时,我得到了错误

在这里,我使用内置的数据集“iris”来显示问题。 数据集“iris”在物种上有三个级别,我使用
Petal.Width
作为协变量,
Species
作为预测变量,前三列变量作为结果变量

我的目的是同时提取相应结果变量的多个边际均值,而不是逐个提取。

#load data and packages
data("iris")
library(car); library(compute.es); library(effects); library(ggplot2);
library(multcomp); library(pastecs); library(WRS)

#set contrasts for the following ANCOVA tests
contrasts(iris$Species) <- contr.poly(3)

#perform 
list2 <- lapply(colnames(iris)[1:3], function(x){
anova_fit = aov(reformulate(c("Petal.Width","Species"),x), data = iris)
summary(effect("Species",anova_fit, se=TRUE))
})
我不知道如何正确使用
stack()
lappy()
来提取边际均值

非常感谢


Ella

我不确定您希望最终预期输出是什么样子

或许,您可以尝试以下方法:

do.call(rbind, lapply(list2, function(x) 
  data.frame(prop = c('effect', 'lower', 'upper'), 
            rbind(x$effect, x$lower, x$upper))))


#    prop setosa versicolor virginica
#1 effect   5.88       5.82      5.83
#2  lower   5.49       5.68      5.49
#3  upper   6.27       5.96      6.17
#4 effect   4.17       2.67      2.33
#5  lower   3.93       2.58      2.11
#6  upper   4.42       2.76      2.54
#7 effect   2.43       4.13      4.71
#8  lower   2.13       4.02      4.44
#9  upper   2.74       4.24      4.98

您还可以通过将
do.call
+
rbind
替换为
purrr
map\u df
来简化此过程:

purrr::map_df(list2, function(x) data.frame(prop = c('effect', 'lower', 'upper'), 
                                 rbind(x$effect, x$lower, x$upper)))

非常感谢你!它起作用了!这和我想要的非常相似@罗纳克沙阿
do.call(rbind, lapply(list2, function(x) 
  data.frame(prop = c('effect', 'lower', 'upper'), 
            rbind(x$effect, x$lower, x$upper))))


#    prop setosa versicolor virginica
#1 effect   5.88       5.82      5.83
#2  lower   5.49       5.68      5.49
#3  upper   6.27       5.96      6.17
#4 effect   4.17       2.67      2.33
#5  lower   3.93       2.58      2.11
#6  upper   4.42       2.76      2.54
#7 effect   2.43       4.13      4.71
#8  lower   2.13       4.02      4.44
#9  upper   2.74       4.24      4.98
purrr::map_df(list2, function(x) data.frame(prop = c('effect', 'lower', 'upper'), 
                                 rbind(x$effect, x$lower, x$upper)))