我想通过Posit终端将一个函数作为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的终端呼叫AS:

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

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

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

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

推荐答案

这应该是可行的:

#!/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

然而,AVOID PARSING ARBITRARY INPUT,因为这样很容易注入恶意代码.见https://stackoverflow.com/a/18391779/6912817

R相关问答推荐

NA仅省略具有NA的 Select 行

替换收件箱的子集(行和列)

仅返回R中所有其他列的列ID和年份缺失(NA)数据的列表

geom_raster不适用于x比例中超过2,15的值

使用scale_x_continuous复制ggplot 2中的离散x轴

列出用m n个值替换来绘制n个数字的所有方法(i.o.w.:R中大小为n的集合的所有划分为m个不同子集)

更改Heatmap Annotation对象的名称

保存包含循环和ifelse的函数的输出

找出疾病消失的受试者

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

如何改变时间图R中的悬停信息?

使用列/行匹配将两个不同维度的矩阵相加

如何从R ggplot图片中获取SVG字符串?

在不丢失空值的情况下取消列出嵌套列表

派生程序包| ;无法检索';return()';的正文

在R中创建连续的期间

如何平滑或忽略R中变量的微小变化?

减go R中列表的所有唯一元素对

为什么将负值向量提升到分数次方会得到NaN

每行不同列上的行求和