我想将一个函数应用于 data.tables 列表以更新几列。问题是列表中的 data.tables 最终都发生了相同的变化。这是一个可重现的示例:
library(data.table)
data("mtcars")
setDT(mtcars)
# Replicate dts in a list
dt_list <- rep(list(mtcars), 4)
# My Function
update_dt <- function(i){
# new column
dt_list[[i]][, newcol := i]
# Updating column
dt_list[[i]][, mpg:= mpg + ((i-1)* 100)]
}
# Apply function
lapply(X= 1:length(dt_list), FUN= update_dt)
在这种情况下,我
dt_list
中的所有 data.tables最终相同
最佳答案
正如@r2evans 在评论中提到的,通过复制 data.table,您只是在复制引用。相反,复制 data.frame 并将其设置为 data.table 作为函数的一部分。
library(data.table)
data("mtcars")
# Replicate dts in a list
dt_list <- rep(list(mtcars), 4)
# My Function
update_dt <- function(i){
setDT(dt_list[[i]]) # Set as DT inside function
# new column
dt_list[[i]][, newcol := i]
# Updating column
dt_list[[i]][, mpg:= mpg + ((i-1)* 100)]
}
# Apply function
lapply(X= 1:length(dt_list), FUN= update_dt)
关于r - 更新列表中的 data.tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57549369/