如何使%in%与R中的字符一起工作?
来自Python背景,请参见R文档中的示例:如何使%in%与R中的字符一起工作?,r,string,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 FAL
#%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)我正在寻找精确匹配,而不是正则表达式。我假设您希望找到字符串中“')”字符的位置
您的strsplit
方法存在两个问题。您将%中
%的参数反转,并且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)", "")) == ')'
另一方面,如果您想查看字符串向量中是否存在“'),则可以对strsplit
的返回值使用sapply
,它返回向量列表,每个向量都是输入向量中每个字符串的拆分值:
x <- c('abc', 'ab(cd)')
sapply(strsplit(x, ''), FUN=function(y) ')' %in% y)
## [1] FALSE TRUE
请注意固定了参数。我假设您希望找到字符串中“')字符的位置
您的strsplit
方法存在两个问题。
您将%
中%的参数反转,并且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)", "")) == ')'
另一方面,如果您想查看字符串向量中是否存在“'),则可以对strsplit
的返回值使用sapply
,它返回向量列表,每个向量都是输入向量中每个字符串的拆分值:
x <- c('abc', 'ab(cd)')
sapply(strsplit(x, ''), FUN=function(y) ')' %in% y)
## [1] FALSE TRUE
注意固定的
参数。您必须使用grep
。只需escape“(grep(\\(”,“(62473575,62474092)”)
我正在寻找“(”与元素“(”?它为什么失败以及如何修复它?请注意,c(1,3,5,9)
是四个元素的向量。(62473575,62474092)”
是一个长度为一的字符串。我猜:您想要strsplit((62473575,62474092)“,”)[[1]]
“为什么这么复杂?”是一个很长的对话。这里有两个部分:(1)R的字符串处理范例可以说不如Python的方便;(2)R的字符串处理范例与Python的不同。“为什么用y语言做x这么难?”通常表明您无法在语言之间切换习惯用法。您必须使用grep
。只需escape”(“如下:grep(\\\(,“(62473575,62474092)”)
我在寻找“(”与元素(“)的精确匹配?为什么它会失败以及如何修复它?请注意c(1,3,5,9)
是四个元素的向量。“(6247357562474092)”
是一个长度为一的字符串。我猜:你想要strsplit((6247357562474092)”,”)[[1]
“它为什么这么复杂?”是一个很长的对话。这里有两个部分:(1)R的字符串处理范例可以说不如Python的方便;(2)R的字符串处理范例不同于Python的“为什么在语言y中执行x如此困难?”通常表明您无法在语言之间切换习惯用法。