如何将字符串规则转换为在 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”。目前会提示错误。请帮我解决这个问题。
我会分几个步骤进行:
- 将逻辑运算符拆分为单独的不等式。
- 将-3>x1>=-1.45这样的双不等式变成两个不等式
- 把“=”改成“==”,放在一起。
例如:
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
这样的不等式上失败。如果出现这些情况,我会让你处理。
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”。目前会提示错误。请帮我解决这个问题。
我会分几个步骤进行:
- 将逻辑运算符拆分为单独的不等式。
- 将-3>x1>=-1.45这样的双不等式变成两个不等式
- 把“=”改成“==”,放在一起。
例如:
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
这样的不等式上失败。如果出现这些情况,我会让你处理。