【问题标题】:How do I find an index of a list member in R [duplicate]如何在 R [重复] 中找到列表成员的索引
【发布时间】:2019-08-13 14:41:23
【问题描述】:

假设代码很简单:

a <- list()
a[[1]] <- c(1,2,3)
a[[2]] <- c(2,3,4)

我想询问列表中的向量成员关系并获取成员索引。 所以询问c(1,2,3)我会得到1,询问c(2,3,4)我会得到2。我该怎么做?

【问题讨论】:

    标签: r list


    【解决方案1】:

    一种选择是使用setequalall.equal(来自base R)通过循环list 元素,返回一个逻辑索引并用which 包装

    f1 <- function(lstObj, vec) {
     which(sapply(lstObj, setequal, vec))
     }
    
    f1(a, 1:3)
    #[1] 1
    
    f1(a, 2:4)
    #[1] 2
    

    另外,正如 @IceCreamToucan 在 cmets 中提到的那样

    f1n <- function(lstObj, vec){
       which(sapply(lstObj, function(x, y) isTRUE(all.equal(x, y)), vec))
     }
    

    另一个选项是%in%all

    f2 <- function(lstObj, vec) {
         which(sapply(lstObj, function(x) all(x %in% vec)))
      }
    

    【讨论】:

    • 好答案。小提示:如果顺序很重要,f1 函数定义需要为which(sapply(lstObj, function(x, y) isTRUE(all.equal(x, y)), vec))。结果不同的示例:f1(list(c(2, 1, 3)), 1:3)
    • 没有更简单的解决方案吗?所有这些代码只是为了询问向量是否是列表中的成员?就存储向量而言,列表可能不是最好的方式?
    • @Corel。如果vectors 的长度不同,则list 将是合适的。如果不是,您可以将其作为matrixdata.frame。要检查list 中的元素,可以进入list 的方法会很有用。使用lapply/sapply/mapply 中的任何一个(尽管在不同的上下文中)。把它包装在一个函数中是为了让它更简单
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2021-04-05
    • 2015-03-16
    • 2019-09-15
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多