※ 引述《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