我目前正在R中使用data.table,并试图将变量"data_set"添加到数据表列表中,该列表中包含该项的名称。
例如,表的列表是med、symp和care,我想将变量data_set添加到每个表中,其中在数据表med中,"data_set"等于"med",在数据表symp中,"data _set"将等于"symp"。我知道我可以使用lapply,但我一直纠结于如何将每个表的名称存储在"data_set"变量中。我知道事情会变成这样。。。。
tables<-c("med", "symp", "care")
tables_1<-lapply(mget(tables),function(x)x[, data_set:=…...])
如何在"data_set"变量中引用和存储每个数据表的名称?
我建议您可以在这里使用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
以减少内存占用。