Fra*_*ank 6 grep r vector operators grepl
假设我有一些字符向量,我想将其子集化为与某些正则表达式不匹配的元素.我可能会使用-运算符删除grep匹配的子集:
> vec <- letters[1:5]
> vec
[1] "a" "b" "c" "d" "e"
> vec[-grep("d", vec)]
[1] "a" "b" "c" "e"
Run Code Online (Sandbox Code Playgroud)
除了匹配的条目之外,我还给了所有东西"d".但是如果我搜索一个未找到的正则表达式,而不是像我期望的那样得到所有东西,我什么也得不回来:
> vec[-grep("z", vec)]
character(0)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
这是因为grep返回一个整数向量,当没有匹配时,它返回integer(0).
> grep("d", vec)
[1] 4
> grep("z", vec)
integer(0)
Run Code Online (Sandbox Code Playgroud)
并且由于-运算符按integer(0)元素运行,并且没有元素,否则不会更改整数向量:
> -integer(0)
integer(0)
Run Code Online (Sandbox Code Playgroud)
所以vec[-grep("z", vec)]评估vec[-integer(0)]哪个反过来评估vec[integer(0)],哪个是character(0).
您将获得您期望的行为invert = TRUE:
> vec[grep("d", vec, invert = TRUE)]
[1] "a" "b" "c" "e"
> vec[grep("z", vec, invert = TRUE)]
[1] "a" "b" "c" "d" "e"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |