如何在R中找到列表成员的索引
假设代码很简单:如何在R中找到列表成员的索引,r,list,R,List,假设代码很简单: a <- list() a[[1]] <- c(1,2,3) a[[2]] <- c(2,3,4) a一个选项是使用setequal或all.equal(从base R)循环通过列表元素,返回逻辑索引并用包装 f1 <- function(lstObj, vec) { which(sapply(lstObj, setequal, vec)) } f1(a, 1:3) #[1] 1 f1(a, 2:4) #[1] 2 回答得好。小提示:如果顺序
a <- list()
a[[1]] <- c(1,2,3)
a[[2]] <- c(2,3,4)
a一个选项是使用setequal
或all.equal
(从base R
)循环通过列表
元素,返回逻辑索引并用包装
f1 <- function(lstObj, vec) {
which(sapply(lstObj, setequal, vec))
}
f1(a, 1:3)
#[1] 1
f1(a, 2:4)
#[1] 2
回答得好。小提示:如果顺序很重要,f1函数定义将需要是(sappy(lstObj,函数(x,y)是真的(all.equal(x,y)),vec))
。一个结果不同的例子:f1(列表(c(2,1,3)),1:3)
难道没有更简单的解决方案吗?所有这些代码只是为了询问向量是否是列表中的成员??在存储向量的意义上,也许列表不是最好的方式?@Corel。如果向量
的长度不同,则宜使用列表
。如果不是,则可以将其作为矩阵
或数据帧
使用。要检查列表中的元素
,可以进入列表
的方法将非常有用。可以使用lappy/sapply/mappy
(但在不同的上下文中)。将其包装在函数中是为了使其更简单
f1n <- function(lstObj, vec){
which(sapply(lstObj, function(x, y) isTRUE(all.equal(x, y)), vec))
}
f2 <- function(lstObj, vec) {
which(sapply(lstObj, function(x) all(x %in% vec)))
}