将未计算的命令传递给 R 中的函数

cra*_*ola 4 eval r

我是一个 R 新手,我被一个看似简单的问题所困扰,但却触及了关于如何以及何时在 R 中评估事物的非常深刻的问题。

我经常使用 Rserve;远程评估事物的典型语法重复输入有点麻烦:

RSeval(connection, quote(try(command)))
Run Code Online (Sandbox Code Playgroud)

所以我想要一个函数 r 只用调用来做同样的事情:

r(command)
Run Code Online (Sandbox Code Playgroud)

我的第一次天真的尝试注定会失败:

r <- function(command) {
    RSeval(c, quote(try(command)))
}
Run Code Online (Sandbox Code Playgroud)

您已经猜到了:这实际上是发送try(command)到我困惑的 Rserve 守护进程。我希望command得到部分评估,如果这有意义的话——即被我作为参数输入的内容替换,但不在本地评估它。

我寻找解决方案,浏览了引用、替代、评估、调用等的文档。但我找不到有效的东西。要么command在本地进行评估,要么根本不评估。

这不是一个大问题,我可以quote(try())一直输入整个该死的东西;但此时我最好奇的是如何让它发挥作用!

编辑:关于我想要做什么的更多解释。

  • 在上面的文本中,command理想情况下是对函数的调用,即不是字符串。类似于a <- 3orassign("a", 3)而不是"a<-3"or 的东西quote(a<-3)。我相信这就是这件事变得棘手的部分原因。似乎很难告诉 R 不要在本地评估它,而只是按字面意思发送它。基本上我希望我的函数有点像quote(),它不评估它的参数。
  • 关于我的意图的一些解释。我希望经常使用 Rserve 将命令传递到远程 R 守护进程。这些命令将是我自己的(或我的同事)的,并且守护进程受防火墙和身份验证保护(并且不会以 root 身份运行)——因此不必担心恶意命令被传递。
  • 老实说,这不是一个大问题,我会很高兴始终使用RSeval(c, quote(try())). 在这一点上,我认为这更像是对 R 微妙之处的有趣探究:-)

Gre*_*now 5

您可能想使用替代命令,它可以为您提供未评估的参数,您可以将其构建到调用中。