如何让%in%使用R中的字符?

时间:2016-03-20 19:54:09

标签: r string

来自Python背景,并在R文档中看到此示例:

 #%in% is a more intuitive interface as a binary operator, 
 #which returns a logical vector indicating if 
 #there is a match or not for its left operand.

1:10 %in% c(1,3,5,9)
[1]  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE

我正在尝试将字符串转换为列表:

"(" %in% as.list("(62473575, 62474092)")  # does not work 

"(" %in% strsplit("(62473575, 62474092)", "") # kind of works half way

并获得FALSE。到底是怎么回事?

PS:我不想使用grep,(1),因为它将"("视为特殊字符,(2)我正在寻找完全匹配,而不是正则表达式。

1 个答案:

答案 0 :(得分:6)

我假设你想找到')的位置。字符串中的字符。

strsplit方法存在两个问题 您有%in%反转的参数,strsplit返回一个列表。

unlist(strsplit("(62473575, 62474092)", "")) %in% ')'
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

等价,因为右边有一个元素:

unlist(strsplit("(62473575, 62474092)", "")) == ')'

另一方面,如果你想看看')'存在于字符串向量中,您可以在sapply的返回值上使用strsplit,它返回一个向量列表,每个向量是输入向量中每个字符串的拆分值:

x <- c('abc', 'ab(cd)')
sapply(strsplit(x, ''), FUN=function(y) ')' %in% y)
## [1] FALSE  TRUE

等效地,使用grepl

grepl(')', x, fixed=TRUE)
## [1] FALSE  TRUE

请注意fixed参数。