[R] R grep question

Marc Schwartz m@rc_@chw@rtz @end|ng |rom me@com
Thu May 27 17:56:51 CEST 2021


Hi,

A quick clarification:

The regular expression is a single quoted character vector, not a 
character vector on either side of the | operator:

"MLH1|MSH2"

not:

"MLH1"|"MSH2"

The | is treated as a special character within the regular expression. 
See ?regex.

grep(), when value = FALSE, returns the index of the match within the 
source vector, while when value = TRUE, returns the found character 
entries themselves.

Thus, you need to be sure that your ifelse() incantation is matching the 
correct values.

In the case of grepl(), it returns TRUE or FALSE, as Rui noted, thus:

   CRC$MMR.gene <- ifelse(grepl("MLH1|MSH2",CRC$gene.all), "Yes", "No")

should work.

Regards,

Marc Schwartz


Kai Yang via R-help wrote on 5/27/21 11:23 AM:
>   Hi Rui,thank you for your suggestion.
> but when I try the solution, I got message below:
> 
> Error in "MLH1" | "MSH2" :   operations are possible only for numeric, logical or complex types
> 
> does it mean, grepl can not work on character field?
> Thanks,Kai    On Thursday, May 27, 2021, 01:37:58 AM PDT, Rui Barradas <ruipbarradas using sapo.pt> wrote:
>   
>   Hello,
> 
> ifelse needs a logical condition, not the value. Try grepl.
> 
> 
> CRC$MMR.gene <- ifelse(grepl("MLH1"|"MSH2",CRC$gene.all), "Yes", "No")
> 
> 
> Hope this helps,
> 
> Rui Barradas
> 
> Às 05:29 de 27/05/21, Kai Yang via R-help escreveu:
>> Hi List,
>> I wrote the code to create a new variable:
>> CRC$MMR.gene<-ifelse(grep("MLH1"|"MSH2",CRC$gene.all,value=T),"Yes","No")
>>    
>>
>> I need to create MMR.gene column in CRC data frame, ifgene.all column contenes MLH1 or MSH2, then the MMR.gene=Yes, if not,MMR.gene=No
>>
>> But, the code doesn't work for me. Can anyone tell how to fix the code?
>>
>> Thank you,
>>
>> Kai



More information about the R-help mailing list