1

I want to pass a function as an argument of Rscript through Posit Terminal to evaluate a mathematical problem.

This is a reproducible example, where a script named imp.R contains:

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

With a Terminal call from Posit Page as:

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

I've got the error message: bash: syntax error near unexpected token ('`

But with: Rscript imp.R "c(1,2,3)" "sin(x^2)" it returns: "The function is: sin(x^2)".

Expected return: "The function is: [1] 0.8414710 -0.7568025 0.4121185"

  • Thanks, but no. It is part of the alist() sintaxis for as.function(). However, using this scheme its not important. I need to pass a function as argument, anyway. – Adonis Cedeño Jun 24 '23 at 18:36

1 Answers1

2

This should work:

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

Then

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

However AVOID PARSING ARBITRARY INPUT since it is easy to inject malicious code that way. See https://stackoverflow.com/a/18391779/6912817

Ric
  • 5,362
  • 1
  • 10
  • 23