从 R (Renjin) 中的字符串表达式中获取变量名称
Get variables names from string expression in R (Renjin)
我正在使用 Renjin 评估我的 Java 程序中的 R 公式。基本上,用户在文本字段中键入 R 公式,我希望 R/Renjin 为我进行解析,并 return 该表达式中的变量列表。假设用户输入 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
。
还在寻找中……
函数all.vars
和all.names
将return公式中的所有名称。区别在于 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 是否支持这些,但它们是相当基本的。
我正在使用 Renjin 评估我的 Java 程序中的 R 公式。基本上,用户在文本字段中键入 R 公式,我希望 R/Renjin 为我进行解析,并 return 该表达式中的变量列表。假设用户输入 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
。
还在寻找中……
函数all.vars
和all.names
将return公式中的所有名称。区别在于 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 是否支持这些,但它们是相当基本的。