首页 > 解决方案 > R:更改循环内的对象

问题描述

a <- data.frame(x = c(1, 2))
b <- data.frame(x = c(3, 4))

for (df in list(a, b)) {
  print(df)
  df$y <- c(5, 6)
}

每个数据框都被正确打印出来,但添加一个额外的列失败。
广泛的网络搜索建议像

lapply(list(a, b), function(df){
  df$y <- c(5, 6)
})

但这对我没有帮助。

我也很感兴趣的是,为什么for循环中的打印语句有效,但添加y列失败。

这让我很惊讶。

标签: rloopsfor-loopapplylapply

解决方案


df您必须使用该附加列返回's。尝试:

lapply(list(a, b), function(df){
  df$y <- c(5, 6); return(df)
})

输出是:

[[1]]
  x y
1 1 5
2 2 6

[[2]]
  x y
1 3 5
2 4 6

正如@dash2 假设您可能希望将那些更改df的 ' 分配给您list的 of df。所以完整的代码可能如下所示:

a <- data.frame(x = c(1, 2))
b <- data.frame(x = c(3, 4))

l <- list(a, b)
l <- lapply(l, function(df){ df$y <- c(5, 6); return(df) })

推荐阅读