通过终端将函数作为参数传递给 Rscript

Pass function as argument to Rscript through terminal

提问人:Adonis Cedeño 提问时间:6/25/2023 更新时间:6/25/2023 访问量:34

问:

我想通过 Posit Terminal 传递一个函数作为 Rscript 的参数来评估一个数学问题。

这是一个可重现的示例,其中名为imp.R

#!/usr/bin/env Rscript
args = commandArgs(trailingOnly=TRUE)
x <- args[1]
f <- as.function(alist(x=, args[2]))
paste("The function is:", f(x))

使用来自 Posit Page 的终端调用:

/cloud/project$ Rscript imp.R "c(1,2,3)" sin(x^2)

我收到错误消息:bash: syntax error near unexpected token ('`

但是 with: 它返回: .Rscript imp.R "c(1,2,3)" "sin(x^2)""The function is: sin(x^2)"

预期回报:"The function is: [1] 0.8414710 -0.7568025 0.4121185"

R 终端 参数传递

评论

0赞 Adonis Cedeño 6/25/2023
谢谢,但没有。它是 as.function() 的 alist() sintaxis 的一部分。但是,使用此方案并不重要。无论如何,我需要传递一个函数作为参数。

答:

2赞 Ric 6/25/2023 #1

这应该有效:

#!/usr/bin/env Rscript
args = commandArgs(trailingOnly=TRUE)
x <- eval(parse(text=args[1]))
f <- as.function(c(alist(x=),parse(text = "sin(x^2)")[[1]]))
cat("The function is:")
print(f(x))

然后

$ Rscript imp.R "c(1,2,3)" "sin(x^2)"
The function is:[1]  0.8414710 -0.7568025  0.4121185

但是,请避免解析任意输入,因为以这种方式很容易注入恶意代码。查看 https://stackoverflow.com/a/18391779/6912817