举个例子,我有一个很大的各种长度(和一些 NULL)的向量列表,我想找到第一个包含两个元素的列表元素。就像在 this 帖子中一样,我知道对于列表,您可以通过使用 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]]
或者,就像@Josh O'Brien 对 this post 的回答一样,
# get the index of the first element of length 2
seq_along(x)[sapply(x, FUN=function(i) {length(i)==2})]
有什么想法或想法吗?
最佳答案
你想要这个吗?
Find(function(i) length(i) == 2, x) # [1] "we want" "this one"
Position(function(i) length(i) == 2, x) # [1] 5
关于r - 查找(并返回)满足(逻辑)测试的列表的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100688/