【发布时间】:2019-03-11 10:16:47
【问题描述】:
我想知道,是否有一种通用方法可以将字符串转换为函数可识别的对象名称,例如 merge() 或 write.table()。
例如,我有许多数据帧要传递给组合的 Reduce merge 函数。
由于我不想手写所有的名字,我尝试了以下代码:
# some data
d1 <- data.frame(ID = c("1","2", "3"),
A = c(1.1, 2.2, 2.4),
B = c(11.7, 10.2, 9.6))
d2 <- data.frame(ID = c("9","11", "18"),
A = c(1.8, 1.2, 1.4),
B = c(11.9, 10.5, 9.1))
d3 <- data.frame(ID = c("10","13", "15"),
A = c(1.0, 1.5, 1.6),
B = c(10.3, 11.5, 12.1))
# generate names
d_names <- sprintf("d%d",seq(1:3))
# pass vector with names to the function
dat <- Reduce(function(x, y) merge(x, y, all=TRUE),
list(noquote(paste(as.character(d_names), collapse = ", "))))
它不适用于noquote()。生成的数据框应如下所示。
dat <- Reduce(function(x, y) merge(x, y, all=TRUE),
list(d1, d2, d3))
如何将字符向量转换为d1, d2, d3,以便函数将其识别为不同数据帧的名称?
是否有将字符串转换为函数可识别的“输入对象”的通用方法,例如write.table()?
for (i in 1:length(d_names)) {
write.table(x = paste0(d_names[i]), file = paste0("path/path/", d_names[i], ".txt"), sep = "\t",
col.names = TRUE)
}
如何替换表达式x = paste0(d_names[i]),以便write.table() 和merge() 识别实际对象d1、d2 和d3?
【问题讨论】:
-
您可以尝试
mget(d_names)作为起点。 -
然后做
Reduce(function(x, y) merge(x, y, all=TRUE), mget(d_names)) -
我一直在寻找更一般的答案,如何将字符串转换为对象,也可以将其作为
write.table()或其他函数的输入。是否有将字符串转换为“输入对象”的通用方法?
标签: r