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

How to convert string rule to an expression which has a range in R

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)

我需要使用正则表达式将上述规则转换为“-3>x1 & x1>=-1.45 & -3<=x2 & x2<3 & x4==7”。目前会提示错误。请帮我解决这个问题。

我会分几个步骤进行:

  1. 将逻辑运算符拆分为单独的不等式。
  2. 将-3>x1>=-1.45这样的双不等式变成两个不等式
  3. 把“=”改成“==”,放在一起。

例如:

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 = " & ")

这使得 a3 等于

[1] "-3>x1 & x1>=-1.45 & -3<=x2 & x2<3 & x==7"

如果您有除 & 之外的其他逻辑操作,或者如果您的变量有 non-alphanumeric 个字符,例如点或下划线,这将不起作用。它也会在 x1 <= x2 <= x3 这样的不等式上失败。如果出现这些情况,我会让你处理。