该match(x, y)
函数非常适合在 vectorx
的元素中搜索 vector 的元素y
。y
但是,当向量列表(长度可能不同)时,什么是完成类似工作的有效且简单的方法?
我的意思是结果应该是一个长度与 相同的向量x
,并且第 i 个元素应该是y
包含x
, 或的第 i 个元素的第一个成员NA
。
要找到 x 的每个元素(第一个)出现的 y 元素,请尝试以下操作:
## First, a reproducible example
set.seed(44)
x <- letters[1:25]
y <- replicate(4, list(sample(letters, 8)))
y
# [[1]]
# [1] "t" "h" "m" "n" "a" "d" "i" "b"
#
# [[2]]
# [1] "c" "l" "z" "a" "s" "d" "i" "u"
#
# [[3]]
# [1] "b" "k" "e" "g" "o" "i" "h" "j"
#
# [[4]]
# [1] "g" "i" "f" "r" "h" "w" "l" "o"
## Find the element of y first containing the letters a-j
breaks <- c(0, cumsum(sapply(y, length))) + 1
findInterval(match(x, unlist(y)), breaks)
# [1] 1 1 2 1 3 4 3 1 1 3 3 2 1 1 3 NA NA 4 2 1 2 NA 4 NA NA