Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中找到列表成员的索引_R_List - Fatal编程技术网

如何在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)))
  }