在脚本中显式解析部分R代码

时间:2012-10-17 07:44:46

标签: r parsing syntax

我的用例如下:

  • 显示GUI以收集一些R表达式
  • 生成包含我的模拟框架的单个源文件,与用户提供的R表达式混合
  • 允许用户生成单个源文件。如果用户指定的任何表达式包含错误(语法或运行时),我想以用户友好的方式显示它们。

简而言之,我想做点如下的事情:

myExpression <- "3 * 5"
myExprParsed <- tryCatch( parse(myExpression), .... )

我的问题非常简单:R在regex中是否有一些类似\Q \E的构造,从头到尾完全引用一个文本字符串? myExpression不会包含"字符,从而引入语法错误。我不想将文本内容写入单独的文本文件并使用source()

=实施例=

myExpression <- " XXXXXXX "

其中XXXXXX为paste("my random value is ", runif(3))将等于

myExpression <- " paste("my random value is ", runif(3)) "

会产生语法错误。我想要像

这样的东西
myExpression <- verbatim@   paste("my random value is ", runif(3))   @

1 个答案:

答案 0 :(得分:2)

从用户那里得到一些输入 - 我猜你只是从GUI中的文本框中获取值。我将使用scan

> dowhat = scan(what="")
1: x="hello world"
3: 
Read 2 items

我们引用了字符串:

> dowhat
[1] "x=\"hello" "world\""  

我们可以解析它:

> parse(text=dowhat)
expression(x="hello
world")

并且有一个换行符,因为scan()按行拆分。不是真正的问题,如果你关心可以修复。

现在让我们实际运行它:

> eval(parse(text=dowhat))

现在我们应该有x

> x
[1] "hello\nworld"
>