Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中嵌套if-else和regex_R_Regex_If Statement - Fatal编程技术网

在R中嵌套if-else和regex

在R中嵌套if-else和regex,r,regex,if-statement,R,Regex,If Statement,我在和一家公司合作。我已经确定了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和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和if-else。代码拾取第一个模式并将其写入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]中的错误如果您在此处播放一些打印,然后替换它们而不是写入函数,那么您会看到写入函数出现问题,并否定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')


}

你把ifelse和if混淆了。。。其他的这些是不同的。例如,请参阅感谢您的回答。如果有效,我得到了嵌套答案。不客气,然后你可以投票并接受答案,这样问题就结束了: