我是一个R新手,我对这个看似简单的问题感到困惑,但却触及了关于如何以及何时在R中评估事物的深刻问题。
我正在使用Rserve;远程评估事物的典型语法是重复输入有点痛苦:
RSeval(connection, quote(try(command)))
所以我想要一个函数r,只需要调用它就可以做同样的事情:
r(command)
我的第一个,天真的,必然会失败的尝试:
r <- function(command) {
RSeval(c, quote(try(command)))
}
你已经猜到了:这实际上是try(command)
发送给我困惑的Rserve守护进程。我希望command
部分评估,如果这有意义 - 即由我输入的参数替换,但不用在本地评估它。< / p>
我寻找解决方案,浏览文档中的引用,替换,评估,调用等等。但我无法找到有用的东西。 command
要么在本地评估,要么根本不评估。
这不是一个大问题,我可以随时输入整个quote(try())
这个东西;但在这一点上,我对如何让它发挥作用非常好奇!
编辑: 关于我想做什么的更多解释。
command
意味着调用函数,理想情况下 - 即不是字符串。像a <- 3
或assign("a", 3)
而不是"a<-3"
或quote(a<-3)
。
我相信这是使这个棘手的部分原因。似乎很难告诉R不要在本地评估这个,但只是按字面意思发送它。基本上我希望我的函数有点像quote()
,它不会评估它的参数。RSeval(c, quote(try()))
。在这一点上,我认为这更像是对R的太多的有趣探究: - )答案 0 :(得分:4)
您可能想要使用substitute命令,它可以为您提供可以构建到调用中的未评估的参数。
答案 1 :(得分:0)
我不确定我是否理解正确 - eval(parse(text = command))
会不会这样做?请注意command
是一个字符,因此您可以轻松地将其作为函数参数传递。 如果我明白了......
无论如何,评估用户指定的命令可能是恶意的,因此不推荐使用。你应该安装AppArmor并调整它(这不是一个简单的),或放弃整个评估的东西......