来自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)我正在寻找完全匹配,而不是正则表达式。
答案 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
参数。