r - 用文本重现 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)
解决方案
假设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) 相同的结果
推荐阅读
- xml - 如何使用Powershell修改xml中不包含任何内容的空值/两个双引号?
- pandas - 剥离熊猫数据框中的左括号和斜杠字符串
- arrays - 如何从 JsSuccess 解开数组对象
- sql - 有效地从 postgresql 中的垂直列表进行 Sql 查询,如数据透视表
- swift - Xcode不断在视频和图像文件上抛出错误“没有这样的文件或目录”
- typescript - 是什么导致错误“无法在 'TreeWalker' 上设置 'currentNode' 属性”?
- ios - 如何绑定模型中的计算属性和 SwiftUI 中视图的 @Binding 属性
- php - php脚本使用太多内存并返回致命错误
- reactjs - 当我把它放在一个承诺中时,反应 this.props.history.push 停止工作。为什么?
- android - Retrofit2 可以在 Android 4.1.2 上使用吗?我的应用程序导致由 Retrofit2 引起的致命异常