如何解码R中的表达式以获取所有变量?
例如,如果你有:
z<-x+y;
get_all_variables(z);
[1] 'x' 'y'
答案 0 :(得分:8)
您可以使用all.vars
,但需要引用您的表达式:
all.vars(quote(x + y))
# [1] "x" "y"
您不能只使用z
,因为它描述它包含评估的表达式(即表达式的结果),而不是表达式本身。您可以编写一个删除一个步骤的函数:
get_all_variables <- function(expr) all.vars(substitute(expr))
get_all_variables(x + y)
# [1] "x" "y"
但除非您z
或{{}}创建z
,否则您将无法从z <- quote(x + y)
恢复该表达式。
如果你有一个字符串中的表达式,那么你可以使用@ sunny的技术与all.vars
结合使用:
all.vars(parse(text="z <- x + y"))
# [1] "z" "x" "y"
虽然显然你也得到z
。与往常一样,如果有人Bobby Tables,请不要使用parse
评估任意文字。
答案 1 :(得分:1)
据我所知,您需要将表达式存储在字符串中。然后,您可以使用getParseData
解析它:
txt <- "z<-x+y"
sf <- srcfile("txt")
df = getParseData(sf)
df$text[df$token=="SYMBOL"][2:3]
为了进一步启发,以下是getParseData
的完整结果:
line1 col1 line2 col2 id parent token terminal text
11 1 1 1 6 11 0 expr FALSE
1 1 1 1 1 1 3 SYMBOL TRUE z
3 1 1 1 1 3 11 expr FALSE
2 1 2 1 3 2 11 LEFT_ASSIGN TRUE <-
10 1 4 1 6 10 11 expr FALSE
4 1 4 1 4 4 6 SYMBOL TRUE x
6 1 4 1 4 6 10 expr FALSE
5 1 5 1 5 5 10 '+' TRUE +
7 1 6 1 6 7 9 SYMBOL TRUE y
9 1 6 1 6 9 10 expr FALSE