我是一名R语言初学者,目前遇到了一个看似简单却涉及到R语言中深刻问题的难题。
我经常使用Rserve,在远程求值时,典型的语法需要重复输入,这让人感到有点繁琐:
RSeval(connection, quote(try(command)))
我希望有一个函数r,只需要一次调用即可完成同样的操作:
r(command)
我第一个、天真、注定失败的尝试包括:
r <- function(command) {
RSeval(c, quote(try(command)))
}
你猜对了:这实际上发送了
try(command)
给我的困惑的Rserve守护程序。我希望command
被部分评估,如果有意义的话——也就是说,被我输入的参数替换,但不要在本地评估。我寻找解决方案,在引用、替代、评估、调用等文档中浏览,但我无法找到有效的方法。要么
command
在本地评估,要么根本不评估。这不是一个大问题,我可以一直打整个
quote(try())
的东西;但此时我更好奇如何让它工作!编辑: 更多关于我想做什么的解释。
- 在上面的文本中,
command
是指调用函数的调用,最好是——即不是字符字符串。类似于a <- 3
或assign("a", 3)
而不是"a<-3"
或quote(a<-3)
。 我认为这是使这个问题棘手的一部分。似乎很难告诉R不要在本地评估它,而只是字面发送它。基本上,我想让我的函数有点像quote()
,它不评估它的参数。 - 关于我的意图的一些解释。我希望经常使用Rserve向远程R守护程序传递命令。这些命令将是我自己的(或我的同事的),并且由防火墙和身份验证保护的守护程序(不会以root身份运行)——因此不必担心恶意命令被传递。
- 老实说,这不是一个大问题,我很乐意始终使用
RSeval(c, quote(try()))
。此时,我认为这更像是对R的微妙之处的有趣探究 :-)