根据另一个列表对一个列表进行子集化,然后找到最大值的位置
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))
更新: 我有两个如下所示的列表:
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))