有两个载体
static propTypes = {
title: PropTypes.string.isRequired,
navigator: PropTypes.object.isRequired,
}
有没有办法通过双向'进行过滤?部分匹配(如果它们包含或包含在另一个向量中的任何元素中,则删除一个向量中的元素),以便结果是这两个向量:
x <- c("abc", "12")
y <- c("bc", "123", "nomatch")
要解释 - x的每个元素都是y的一个元素的子字符串或超字符串,因此x1为空。更新 - 子字符串与初始字符匹配是不够的 - 可以在匹配的字符串中的任何位置找到子字符串。上面的示例已更新以反映这一点。
答案 0 :(得分:3)
我原本认为?pmatch
可能很方便,但您的编辑说明您不仅仅想要匹配项目的开头。这是一个应该有效的功能:
remover <- function(x,y) {
pmx <- sapply(x, grep, x=y)
pmy <- sapply(y, grep, x=x)
hit <- unlist(c(pmx,pmy))
list(
x[!(seq_along(x) %in% hit)],
y[!(seq_along(y) %in% hit)]
)
}
remover(x,y)
#[[1]]
#character(0)
#
#[[2]]
#[1] "nomatch"
当找不到匹配项时,它正确无效(感谢@Frank获取之前的错误):
remover("yo","nomatch")
#[[1]]
#[1] "yo"
#
#[[2]]
#[1] "nomatch"
答案 1 :(得分:1)
我们可以做到以下几点:
# Return data.frame of matches of a in b
m <- function(a, b) {
data.frame(sapply(a, function(w) grepl(w, b), simplify = F));
}
# Match x and y and remove
x0 <- x[!apply(m(x, y), 2, any)]
y0 <- y[!apply(m(x, y), 1, any)]
# Match y and x and remove
x1 <- x0[!apply(m(y0, x0), 1, any)]
y1 <- y0[!apply(m(y0, x0), 2, any)]
x1;
#character(0)
x2;
#[1] "nomatch"
答案 2 :(得分:1)
我在两个方向上构建了一个包含所有可能匹配项的矩阵,然后将|
与任意方向的匹配结合起来同样匹配,然后将其用于子集x
和{{ 1}}:
y