根据另一个列表对一个列表进行子集化,然后找到最大值的位置

Subsetting one list based on another list and then finding position of the maxima

更新: 我有两个如下所示的列表:

MyList1<-list(c(0,1,1,1),c(1,1,2,0))
MyList2<-list(c(4,5,6,2),c(5,5,2,5))

我要查找的是最大值在 MyList2 中的位置,但仅在 MyList1 中的相应位置 >0 的位置。结果将是:

Result<-list(c(3),c())

为了进一步解释此结果的来源,如果您首先对第二个列表进行子集化,其中 MyList1>0,那么您将拥有:

list(c(5,6,2),c(5,5,2))

两个列表中的最大元素为 6,仅存在于列表 1 中:

list(c(6),c())

这个在MyList2中的位置是:

list(c(3),c())

我不确定获得所需结果的最佳方法。

使用mapply,你可以这样做:

m <- max(unlist(MyList2)[unlist(MyList1) > 0])
mapply(function(x,y) which(x == m & y > 0), MyList2, MyList1)

# [[1]]
# [1] 3
# 
# [[2]]
# integer(0)

purrr::map2:

purrr::map2(MyList2, MyList1, function(x,y) which(x == m & y > 0))

#or 

purrr::map2(MyList2, MyList1, ~ which(.x == m & .y > 0))

数据

MyList1<-list(c(0,1,1,1),c(1,1,2,0))
MyList2<-list(c(4,5,6,2),c(5,5,2,5))