在R中嵌套if-else和regex
我在和一家公司合作。我已经确定了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条件下使用正则表达式还有其他方法吗在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。代码拾取第一个模
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混淆了。。。其他的这些是不同的。例如,请参阅感谢您的回答。如果有效,我得到了嵌套答案。不客气,然后你可以投票并接受答案,这样问题就结束了: