r - 更新列表中的 data.tables

标签 r list function data.table

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

相关文章:

r - 如何使用 for 循环创建向量

Python 返回组中的第一次出现

python - 从列表的 2 个列表中按行提取公共(public)元素

php - 从函数返回 "error"的最佳实践

python - 有两个无休止地运行的函数是否可以接受?

r - ESS 不能很好地处理 data.table 和 knitr

r - 在 R 中找到第二低的非零值

r - 图例和标记平滑拟合线 + 使用 ggplot2 的附加线

c# - 洗牌列表<T>

c - 传递函数 char 参数返回错误