用文本重现 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) 相同的结果
在一个应用程序中,我使用 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) 相同的结果