首页 > 解决方案 > 用文本重现 R 函数调用

问题描述

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

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

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

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

如果我能做这样的事情,调试会非常方便sqlQuery(conn, qry)

标签: rdebuggingdput

解决方案


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

定义 '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) 相同的结果


推荐阅读