我正在处理数学表达式列表。我已经确定了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))"
我尝试使用nested if-else和ifelse()两者都使用。该代码拾取了第一个模式并将其写入" cressiveType1.txt",然后给出一个错误。当模式与正则匹配不匹配时,它将不会转到其他子句。以下代码仅适用于两种类型的表达式。还有其他方法可以在IF-ELSE条件下使用Regex吗?
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)
))
}
嵌套如果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(是,length.out = length(ans))[test& 好的]:更换的长度为零
另外:警告消息:
在rep(是,length.out = length(ans)):
'x'为null,因此结果为null
如果在这里和那里使用一些打印(而不是写入功能),那么您会发现write
功能出现问题并消除IFELSE。<<<<<<<<<</p>
便宜的解决方案应该是这样的。
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')
}