如何将字符串规则转换为范围为R的表达式

如何将字符串规则转换为范围为R的表达式,r,nlp,eval,gsub,string-substitution,R,Nlp,Eval,Gsub,String Substitution,我需要将上述规则转换为-3>x1&x1>=-1.45&-3我将分几个步骤进行: 将逻辑运算符拆分为单独的不等式。 将双不等式(如-3>x1>=-1.45)更改为两个不等式。 将=更改为==,并将其全部放在一起。 例如: x1=3 x2=3 x3=4 x4=7 df_new = data.frame(x1,x2,x3,x4) a<-"-3>x1>=1.45 & -3<=x2<3 & x4==7" df_new <- dat

我需要将上述规则转换为-3>x1&x1>=-1.45&-3我将分几个步骤进行:

将逻辑运算符拆分为单独的不等式。 将双不等式(如-3>x1>=-1.45)更改为两个不等式。 将=更改为==,并将其全部放在一起。 例如:

x1=3 
x2=3
x3=4
x4=7
df_new = data.frame(x1,x2,x3,x4)

a<-"-3>x1>=1.45 & -3<=x2<3 & x4==7"
df_new <- data.frame(x1=3,x2=3,x3=4,x4=7)
eval(parse(text=a),df_new)

如果除&之外还有其他逻辑操作,或者变量具有非字母数字字符(如点或下划线),则此操作将不起作用。它也会在x1这样的不平等上失败,非常感谢。我现在查一下。如果你不介意的话,请解释一下a2号线。我觉得你只限于检查负值。它可以是消极的,也可以是积极的。可以是浮点数或整数。您应该阅读帮助页?regexp。它解释了正则表达式语法:[-0-9.]匹配负号、数字或小数点。它将匹配像“2-3.4.5”这样的废话以及数字。
a1 <- strsplit(a, "&", fixed = TRUE)[[1]]
a1a <- gsub(" ", "", a1) # get rid of spaces
a2 <- gsub("([-0-9.]+[<>=]+)([[:alpha:]]+[[:alnum:]]*)([<>=]+.+)",
           "\\1\\2 & \\2\\3", a1a)
a3 <- paste(gsub("[^<>]={1}", "==", a2), collapse = " & ")
[1] "-3>x1 & x1>=-1.45 & -3<=x2 & x2<3 & x==7"