首页 > 解决方案 > R:data.table-将变量添加到数据表列表中,其中包含列表中每个表的名称

问题描述

我目前正在使用 data.table 在 R 中工作,并尝试将变量“data_set”添加到包含列表中该项目名称的数据表列表中。

例如 - 表列表是 med、symp 和 care,我想将变量 data_set 添加到每个表中,其中在数据表 med 中,“data_set”将等于“med”,在数据表 symp 中,“data_set”将等于“症状”。我知道我可以为此使用 lapply,但我一直坚持如何将每个表的名称存储在“data_set”变量中。我知道它会变成这样......

   tables<-c("med", "symp", "care")
   tables_1<-lapply(mget(tables),function(x)x[, data_set:=…...])

如何在“data_set”变量中引用和存储每个数据表的名称?

标签: rdata.table

解决方案


我建议你可以使用Map而不是lapply这里。

med <- data.table(a=1); symp <- data.table(b=1); care <- data.table(d=1)
tables <- c("med", "symp", "care")
tables_1 <- Map(function(x, nm) copy(x)[, data_set := nm], mget(tables), tables)
tables_1
# $med
#    a data_set
# 1: 1      med
# $symp
#    b data_set
# 1: 1     symp
# $care
#    d data_set
# 1: 1     care

我使用copy 推断您的使用lapply不需要副作用。如果没有copy,您的全局环境变量 ( med, symp, care) 也会添加该列。这可能是期望的和/或可接受的,在这种情况下删除copy以减少内存占用。


推荐阅读