R:如何在不使用%in%的情况下检查是否在另一个不同长度的向量中找到一个向量


vector_1 = c(4,3,5,1,2)
vector_2 = c(3,1)
output:
[1] FALSE  TRUE FALSE  TRUE FALSE

如何在不使用%中的运算符%或R中的任何函数的情况下,仅使用基本运算符/循环来获得输出?

参见match.fun(`%in%`)

match(vector_1,vector_2, nomatch = 0) > 0

没有"函数";有点模糊,因为实际上R中的任何东西都是函数。可能这是一个赋值,并且需要一个for循环。

res <- logical(length(vector_1))
for (i in seq_along(vector_1)) {
for (j in seq_along(vector_2)) {
if (vector_1[i] == vector_2[j])
res[i] <- TRUE
}
}
res
# [1] FALSE  TRUE FALSE  TRUE FALSE

然而,在你想做之类的事情的地方,这并不是很R-ish

apply(outer(vector_1, vector_2, `==`), 1, (x) x[which.max(x)])
# [1] FALSE  TRUE FALSE  TRUE FALSE

数据:

vector_1 <- c(4, 3, 5, 1, 2)
vector_2 <- c(3, 1)

单向sapply()-

sapply(vector_1, function(x) any(x == vector_2))
[1] FALSE  TRUE FALSE  TRUE FALSE

最新更新