如何将字符串规则转换为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

解决方法

我将分几个步骤进行操作:

  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"

如果您除了&之外还有其他逻辑运算,或者您的变量具有非字母数字字符(例如点或下划线),则此操作将无效。它也将因x1 <= x2 <= x3等不等式而失败。如果这些情况发生,我将留给您处理。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...