[问题] 多重选择的 grep

楼主: Edster (Edster)   2016-10-12 16:39:13
- 问题: 当你想要问问题时,请使用这个类别
[问题类型]:
效能咨询(我想让R 跑更快)
[软件熟悉度]:
请把以下不需要的部份删除
开发者(有撰写R 的套件经验)
[问题叙述]:
一个简单的问题
一堆字串中,想要撷取/筛选复数条件的字串
例如
"./zw1_agriculture.txt"
"./zw1_agriculture.txt.xml"
"./zw1_bareland.txt"
"./zw1_bareland.txt.xml"
"./zw1_built_up.txt"
"./zw1_built_up.txt.xml"
"./zw1_forest.txt"
"./zw1_forest.txt.xml"
"./zw1_mining.txt"
"./zw1_mining.txt.xml"
"./zw1_watersurface.txt"
"./zw1_watersurface.txt.xml"
等等
只有下面的方法吗?
for(i in c("mining","watersurface","xml")) f = f[grep(i, f, invert = TRUE)]
我试着用lapply,但最后还需要取交集,不算好用,不如用for.
f = lapply(c("mining","watersurface","xml"),
FUN=function(x){f = f[grep(x, f, invert = TRUE)]; return(f)})
[关键字]:
grep, 复选
作者: clansoda (小笨)   2016-10-12 17:02:00
是只要达成其中一个就可以吗? 我之前是用|串起来一个OR的概念就可以用一行写完
楼主: Edster (Edster)   2016-10-12 17:09:00
欢迎,只要是更简单的写法。
作者: carl090105 (Jing)   2016-10-12 19:32:00
用正则有试过吗
楼主: Edster (Edster)   2016-10-12 20:41:00
strs[grep(paste(strToFind, collapse = "|"), strs,invert = T)]感谢提点,原来还有这种做法。

Links booklink

Contact Us: admin [ a t ] ucptt.com