Re: [问题] 多重选择的 grep

楼主: celestialgod (天)   2016-10-12 18:50:30
※ 引述《Edster (Edster)》之铭言:
:
: - 问题: 当你想要问问题时,请使用这个类别
:
: [问题类型]:
:
: 效能咨询(我想让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, 复选
:
strs <- c( "./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")
strToFind <- c("mining", "watersurface", "xml")
library(stringr)
outStr <- setdiff(strs, str_subset(strs, paste(strToFind, collapse = "|")))
f <- strs
for(i in c("mining","watersurface","xml")) f = f[grep(i, f, invert = TRUE)]
all.equal(outStr, f) # TRUE
作者: Edster (Edster)   2016-10-12 20:44:00
感谢提点,我把另一种写法回在上面。原来 "字串|字串"可以这样用

Links booklink

Contact Us: admin [ a t ] ucptt.com