在 R 中使用正则表达式嵌套 if-else

斯里尼闪耀

我正在处理一个数学表达式列表我已经确定了 6 种主要的表达模式。我正在使用正则表达式来过滤每个模式并将类似的表达式写入一个文件,如果任何表达式与任何正则表达式都不匹配,则这些表达式将被写入一个单独的文件 (Log.txt)。

s1 = "(5.0 - 50.0)"

s2 = "((5.0 - 50.0) - 15.0)"

s3 = "(15.0 - (5.0 - 50.0))"

s4 = "((43.0 - 85.0) + (18.0 + 84.0))"

s5 = "(100.0 - ((5.0 - 57.0) + 92.0))"

s6 = "(((12.0 + 89.0) - 73.0) - (58.0 - 90.0))"

我试过使用嵌套的 if-else 和 ifelse() 。代码选取第一个模式并将其写入“ExpressionType1.txt”,然后给出错误。当模式与正则表达式不匹配时,它不会转到 else 子句。下面的代码仅适用于两种类型的表达式。有没有其他方法可以在 if-else 条件下使用正则表达式?

expressionList = read.table("expressionList.txt",header = T,sep = "\n")

for(i in 1:length(expressionList[,1])){

  currentExpression = as.character(expressionList[i,1])  

  ifelse(grepl("^\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",currentExpression, perl = T),
         write(currentExpression,file="ExpressionType1.txt",append=TRUE),
    ifelse(grepl("^\\(\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",currentExpression, perl = T),
                write(currentExpression,file="ExpressionType2.txt",append=TRUE), write(currentExpression,file="Log.txt",append=TRUE)
                        ))


}

嵌套 if-else

  ifelse(grepl("^\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",
          currentExpression, perl = T) == TRUE){

    write(currentExpression,file="ExpressionType1.txt",append=TRUE)

  } else if(grepl("^\\(\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",
          currentExpression, perl = T) == TRUE){ 

    write(currentExpression,file="ExpressionType2.txt",append=TRUE)

  } else{
    write(currentExpression,file="Log.txt",append=TRUE)
  }

ans[test & ok] <- rep(yes, length.out = length(ans))[test & ok] 中的错误:替换长度为零

另外: 警告信息:

在 rep(yes, length.out = length(ans)) 中:

'x' 为 NULL,因此结果将为 NULL

乔治·索蒂罗普洛斯

如果你在这里和那里玩一些打印(替换它们而不是写函数),那么你会看到write函数出了问题并否定了 ifelse。

一个廉价的解决方案应该是这样的。

for(i in 1:length(expressionList[,1])){ # i <- 1 
print(i)  
  currentExpression = as.character(expressionList[i,1])  
 enter1 = FALSE 
 enter2 = FALSE 
  if(grepl("^\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",currentExpression, perl = T)){
         write(currentExpression,file="ExpressionType1.txt",append=TRUE)
    enter1 <- TRUE}
         # print('enter 1'),
         if(grepl("^\\(\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",currentExpression, perl = T)){
                write(currentExpression,file="ExpressionType2.txt",append=TRUE)
           enter2 <- TRUE}

  if(enter1 == F & enter2 == F){ write(currentExpression,file="Log.txt",append=TRUE)}

         # print("enter 2"), print('enter 3')


}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章