【发布时间】:2015-04-03 15:15:53
【问题描述】:
这是我的情况。我有一个 data.frame,比如说:DF <- data.frame(....)
现在我想使用 SASxport::write.xport(DF, ...) 将此 DF 导出到 SAS 传输文件
函数 write.xport 采用变量名称并使用它来命名 SAS 数据集。因此,上面的代码将生成 SAS 数据集,其中包含一个名为“DF”的表。 好的。只要好。
现在我想将调用 SASxport 封装在另一个执行一些初始任务的函数中。
fn <- function(DataFrame) {
.... do something ....
write.xport( DataFrame, .... )
}
fn(DF)
现在问题来了。生成的 SAS 数据集包含一个名为“DataFrame”的表,而不是“DF”。
所以,我尝试获取数据集的原始名称并以某种方式将其传递给 write.xport:
fn <- function(DataFrame) {
.... do something ....
params <- as.list(match.call()[-1])
name <- as.character(params$DataFrame)
write.xport( eval(parse(text=name)), .... )
}
fn(DM)
但这不起作用。它会创建名称无效的 SAS 文件(因此它肯定不是“DM”),使文件无法被 SAS 读取。 eval/substitute 也不能正常工作(SAS 中的名称是“eval_sub”)。
如何将数据集的原始名称 DF 传递给 write.xport 的内部调用?
代码应该欺骗 write.xport 函数,给她 DF,而不是 DataFrame,就像在控制台中手动编写代码一样。
这可能吗?
编辑:
好的,eval(parse(text = paste0("write.xport(", name, ........."))) 成功了。现在已经解决了。
【问题讨论】:
-
是的,你是对的。目前我无法接受我的回答,它说我将能够在 2 天内做到这一点。
标签: r