用文本重现 R 函数调用

reproduce R function call with text

在一个应用程序中,我使用 RODBC 访问数据库。具体来说,我调用了这样一个函数:sqlQuery(conn, qry),其中 qry 是一个字符串,conn 是一个 RODBC 连接对象。

是否可以将其粘贴到文件中,如果我将文件内容复制并粘贴到终端中,我将重现准确的函数调用?

例如,如果我创建一个数据框:df <- data.frame(test = c(1, 2, 3)),我可以调用 dput(df),这将 return:structure(list(frank = c(1, 2, 3)), class = "data.frame", row.names = c(NA, -3L))

如果我将其复制并粘贴到终端中,我将获得原始数据框。

如果我能为 sqlQuery(conn, qry)

做这样的事情,调试起来会非常方便

假设 dput 对您的对象工作正常,并且我们可以假设任何所需的库都已加载 and/or 定义的函数,为什么不像这样构建函数调用字符串:

定义 'fput' 函数以生成将复制函数调用的可粘贴字符串:

fput = function( fun_string, ... ) {
    args=as.list(match.call(expand.dots=F))[["..."]]
    arg_strings=lapply(args,function(arg) capture.output(do.call(dput,list(arg),envir=parent.frame())))
    arg_string=paste(arg_strings,collapse=",")
    paste(fun_string,"(",arg_string,")")
}

示例:

示例数据:

a=1:10
b=a^2

复制为可粘贴字符串的示例函数调用:

plot(a,b)

调用 fput():

fput( "plot", a, b )

输出:

[1] "plot ( 1:10,c(1, 4, 9, 16, 25, 36, 49, 64, 81, 100) )"

检查:输出的复制粘贴生成与 plot(a,b) 相同的结果