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

标签 r list subset

举个例子,我有一个很大的各种长度(和一些 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/

相关文章:

R:选择子集而不复制

r - 如何根据 R 中的两个条件对数据框进行分组或子集化

python - 识别最高行值所属的列,python或R

r - R 中 apply.monthly 的每月操作时间序列

list - lisp 列表连接

python - 将多行字符串的每一行发送到 for 循环中的列表

python - 测试两个列表列表是否相等

python - 无法对 Pandas 数据框进行子集化

r - knit/Sweave 中使用 R 变量作为条件的 If-Else 语句(第 2 部分)

r - 在 R markdown 中生成下标