提问人:Adonis Cedeño 提问时间:6/25/2023 更新时间:6/25/2023 访问量:34
通过终端将函数作为参数传递给 Rscript
Pass function as argument to Rscript through terminal
问:
我想通过 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"
答:
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
评论