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

10-11 22:42
查看更多