我想将一个功能应用于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/