从R(Renjin)中的字符串表达式中获取变量名称

时间:2017-07-12 10:34:30

标签: java r parsing eval renjin

我使用Renjin来评估我的Java程序中的R公式。基本上用户在文本字段中键入R公式,我希望R / Renjin为我做解析,并返回该表达式中的变量列表。假如用户输入 a * b ,我希望["a", "b"]为结果。

我查看了Java部分的RParser.parse()方法。但是当我调用RParser.getResult()时,我得到一个SEXP对象,我从中找不到获取变量名称的方法。

在R方面,我看了parse(text="a*b")。我可以eval()它,但我也没有办法找到这些名字。

有什么想法吗?

修改

从R开始,可以通过以下方式实现这一目标:

> d = getParseData(parse(text="a*b"))
> d$text[which(d$token=="SYMBOL")]
[1] "a" "b"

问题是,当我用Renjin运行它时,我得到Exception in thread "main" org.renjin.eval.EvalException: getParseData() is not currently supported by Renjin

仍在寻找...

1 个答案:

答案 0 :(得分:1)

函数all.varsall.names将返回公式中的所有名称。区别在于all.names还包含函数名称,而all.vars排除了它们。

> f <- y ~ a + sin(b)
> f
y ~ a + sin(b)

> all.vars(f)
[1] "y" "a" "b"

> all.names(f)
[1] "~"   "y"   "+"   "a"   "sin" "b"  

我不知道Renjin是否支持这些,但它们是相当基本的。