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
循环中的print语句有效,但y
列的添加失败。
这对我来说很令人惊讶。
答案 0 :(得分:1)
您必须使用该附加列返回df
。
尝试:
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
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) })
。所以完整的代码看起来像:
def foldByTitle(listInput: List[String]): List[Item] =
listInput.map(Item.parseItem).foldLeft(List.empty[Item])(sumByTitle)
val sumByTitle: (List[Item], Item) => List[Item] = (acc, curr) =>
acc.find(_.name == curr.name).fold(curr :: acc) { i =>
acc.filterNot(_.name == curr.name) :+ i.copy(num1 = i.num1 + curr.num1, num2 = i.num2 + curr.num2)
}
case class Item(name: String, category: String, num1: Int, num2: Int)
object Item {
def parseItem(serializedItem: String): Item = {
val itemTokens = serializedItem.split(",").map(_.trim)
Item(itemTokens.head, itemTokens(1), itemTokens(2).toInt, itemTokens(3).toInt)
}
}
答案 1 :(得分:0)
> a <- data.frame(x = c(1, 2))
> b <- data.frame(x = c(3, 4))
> l <- list(a = a, b = b)
> list2env(lapply(l, function(x) {x$y <- c(5, 6);x}), envir = .GlobalEnv)
<environment: R_GlobalEnv>
> a
x y
1 1 5
2 2 6
> b
x y
1 3 5
2 4 6