如何从要在data.frame上下文中计算的R表达式中提取变量

如何从要在data.frame上下文中计算的R表达式中提取变量,r,regex,data.table,expression,pcre,R,Regex,Data.table,Expression,Pcre,我在字符中有一些表达式,它们应该在数据表中进行计算(不仅仅是上下文)。 为了确保所有必需的列都存在,我想在R表达式中提取所述列 我想要什么: 将~添加到表达式时,可以创建有效的R公式表达式: expr <- '~ p001+mean(p001,na.rm=TRUE)-weighted.mean(p002,w=p003)+someRandomOtherColumn' 如果只想获取f()中的值,p004不应出现在预期结果中@Cath,我认为在这种情况下,\\bp\\d+\\b会比得上。必须有

我在
字符
中有一些表达式,它们应该在
数据表
中进行计算(不仅仅是上下文)。 为了确保所有必需的列都存在,我想在R表达式中提取所述列

我想要什么:


~
添加到表达式时,可以创建有效的R公式表达式:

expr <- '~ p001+mean(p001,na.rm=TRUE)-weighted.mean(p002,w=p003)+someRandomOtherColumn'

如果只想获取
f()
中的值,
p004
不应出现在预期结果中@Cath,我认为在这种情况下,
\\bp\\d+\\b
会比得上。必须有自定义边界。@statquant您能保证在
f(…)
中没有
?@WiktorStribiżew可以嵌套
f()
,但这很好,我可以递归调用相同的函数,这会使问题复杂化。您可以匹配嵌套的
(…)
,但要匹配嵌套的
(…)
,需要第二次传递。什么是“允许的”列名?我不明白
someRandomOtherColumn
是如何在
f()
中出现的。哈哈,非常聪明!希望我找不到柜台example@statquant谢谢注意,这种方法比使用正则表达式更健壮,因为它使用了R的表达式解析器。。。无论如何,谢谢
expr <- 'p001+mean(p001,na.rm=TRUE)-weighted.mean(p002,w=p003)+someRandomOtherColumn'
clean <- function(string) gsub(string, pattern='[_|\\.|a-zA-z]+\\(([^)]*)\\)', replacement='\\1', perl=TRUE)
clean(expr)
[1] "p001+p001,na.rm=TRUE-p002,w=p003+someRandomOtherColumn"
# Then I can remove =* than split on ,|+|-|*
expr <- '~ p001+mean(p001,na.rm=TRUE)-weighted.mean(p002,w=p003)+someRandomOtherColumn'
all.vars(as.formula(expr))
# [1] "p001"             "p002"             "p003"             "someRandomOtherColumn"