运算符 OR 是不是对跟随它的参数的位置敏感

Posted

技术标签:

【中文标题】运算符 OR 是不是对跟随它的参数的位置敏感【英文标题】:Is the operator OR sensitive to the position of the argument that follows it运算符 OR 是否对跟随它的参数的位置敏感 【发布时间】:2022-01-03 13:43:06 【问题描述】:

我想编写相当简洁、更易读的 R 代码。 我每次都尽量去排队,以避免有很长的代码。我注意到我有不同的结果,这取决于我是否在grepl 中的 OR 运算符之后去排队。这让我很烦

以这段代码为例。我有:

sigaps$Oncologie<-ifelse(
  
  grepl("Radioth[ée]rapie|Chimioth[ée]rapie|Radiochimioth[ée]rapie|Cancer|Tumeur|Tumoral",
        sigaps$Titre.de.l.étude,
        ignore.case=TRUE),1,0)
table(sigaps$Oncologie)

  0   1
377 157

但是当我将 Tumoral 移到下一行时,我得到了不同的结果。我不明白什么不 作品:

sigaps$Oncologie

  grepl("Radioth[ée]rapie|Chimioth[ée]rapie|Radiochimioth[ée]rapie|Cancer|Tumeur|
         Tumoral",
        sigaps$Titre.de.l.étude,
        ignore.case=TRUE),1,0)
table(sigaps$Oncologie)

  0   1
380 154

我一直这样做。但我想知道,如果我不能用两种我认为相同的不同编码方式得到相同的结果,我是不是多年来都没有犯过编码错误?

【问题讨论】:

您正在将换行符(和空格)放入您的字符串 - 实际上它正在寻找类似" Tumoral" 您将换行符放在正则表达式中,因此它是搜索模式的一部分。使用paste0("Tumora", "Tumorb", collapse = "|") 将一个大的正则表达式拆分为多行 【参考方案1】:

之所以会出现差异,是因为您将换行并通过将其拆分到下一行并缩进来在字符串中添加空格。通过 a) 不这样做或 b) 使用 paste(..., sep="|") 创建字符串来修复它

grepl(paste("Radioth[ée]rapie", "Chimioth[ée]rapie",
            "Radiochimioth[ée]rapie", "Cancer", 
            "Tumeur", "Tumoral", sep="|"),
      sigaps$Titre.de.l.étude, ignore.case=TRUE)

【讨论】:

以上是关于运算符 OR 是不是对跟随它的参数的位置敏感的主要内容,如果未能解决你的问题,请参考以下文章

运算符重载

JavaScript基础之数据类型部分总结

为啥 MySQL 在使用带有通配符的 LIKE 运算符时会忽略假名敏感?

r %in% 运算符 |控制大小写敏感性[重复]

位运算符

用shell做个加减乘除运算