此代码工作正常,但需要提前了解数据表名称以构建list(x,y,z)
library(data.table)
x <- data.table(i = c("a","b","c"), j = 1:3)
y <- data.table(i = c("b","c","d"), k = 4:6)
z <- data.table(i = c("c","d","a"), l = 7:9)
Reduce(function(...) merge(..., all = TRUE, by = "i"), list(x, y, z))
但是我有一个生成数据表的脚本(名称是动态构造的)并创建一个字符向量,如下所示:
dtList <- c("x", "y", "z")
我想在Reduce代码中使用dtList。我尝试过各种各样的事情。这些都不起作用
list(dtList)
as.vector(dtList, mode = "list")
答案 0 :(得分:0)
以下是我根据JRR的评论提出的代码,这些代码似乎适用于我的特定设置。 dtNameList实际上是从我的完整代码中的其他地方读入的,但是对于这个例子,我刚刚创建了它的虚拟版本。
library(data.table)
dtList <- list()
dtNameList <- c("x", "y", "z")
for (k in 1:length(dtNameList)){
dt <- data.table(i = c("a","b","c"), j = 1:3)
# assign(k, dt)
dtList[[dtNameList[k]]] <- dt
}
Reduce(function(...) merge(..., all = TRUE, by = "i"), dtList)