查找(并返回)满足(逻辑)测试的列表的第一个元素

Cot*_*ood 4 r list subset

作为一个例子,我有一个包含各种长度(和一些NULL)的矢量列表,并希望找到第一个包含两个元素的列表元素.正如在这篇文章中,我知道使用列表,您可以通过使用sapply()和子集化第一个结果来使用类似的方法.由于上面链接的帖子中的解决方案在match()这种情况下不起作用,我很好奇是否有更优雅(并且计算效率更高)的方法来实现这一点.

一个可重复的例子


# some example data
x <- list(NULL, NULL, NA, rep("foo", 6), c("we want", "this one"),
           c(letters[1:10]), c("foo", "bar"), NULL)
x

# find the first element of length 2 using sapply and sub-setting to result #1
x[sapply(x, FUN=function(i) {length(i)==2})][[1]]
Run Code Online (Sandbox Code Playgroud)

或者,正如@Josh O'Brien对这篇文章的回答一样,

# get the index of the first element of length 2
seq_along(x)[sapply(x, FUN=function(i) {length(i)==2})]
Run Code Online (Sandbox Code Playgroud)

有什么想法或想法吗?

Rob*_*ski 6

你想要这个吗?

Find(function(i) length(i) == 2, x) # [1] "we want"  "this one"
Position(function(i) length(i) == 2, x) # [1] 5
Run Code Online (Sandbox Code Playgroud)