需要在R中的多个数据集上迭代for循环

kse8i1jr  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(136)

我一直很难找到一个简洁的方法来迭代多个 Dataframe 在R的单向方差分析。所有的 Dataframe 我正在使用具有相同的格式,但我试图找出如何把他们都到一个列表中,然后选择一个变量的数据内选择方差分析。我试图使用的代码如下,我'我需要一些指导,告诉我如何实际设置for循环来迭代 Dataframe 列表,以便在需要更改的只是 Dataframe 时保存反复重写/粘贴相同代码的时间。

df<- list(data.1, data.2, data.3, etc)
#treatment and output are examples of my column titles
for(i in df)
{ 
oneway <- aov(df[i[Treatment]] ~ output, data = df[i]) }

我希望它能让我在列表的数据框中选择一列,但它一直没有工作。我是r的新手,欢迎任何和所有的建议!

2vuwiymt

2vuwiymt1#

我相信还有更优雅的解决方案,但是如果您想坚持使用for循环,可以尝试下面的方法,其中我使用默认的iris数据在所有列上运行aov() for Species

# data
data.1 <- data.2 <- data.3 <- iris
ll <- list(data.1, data.2, data.3)

oneway <- vector(mode = "list", length = length(ll))

for(x in seq_along(ll)){
  for (y in names(ll[[x]])[-5]){
    oneway[[x]][[y]] <- aov(ll[[x]][[y]] ~ ll[[x]][["Species"]], data = ll[[x]])
  }
}

结果是一个嵌套列表,外部列表的长度为3(数据集的数量),每个内部列表的长度为4(列的数量减去Species)。

vxf3dgd4

vxf3dgd42#

下面是使用@jpsmith答案中的数据得出的一个简短的解决方案:

data.1 <- data.2 <- data.3 <- iris
df <- list(data.1, data.2, data.3)

result <- lapply(df, function(x) apply(x[,-5], 2, function(y) aov(y ~ Species, data = x)))

相关问题