我有一个包含很多对象的列表;在这个 MWE 的情况下 - 只有 6。我有兴趣为对象选择元素的位置 msfr
, msfl
, mshr
和 mshl
对应于 vms
中的相应值(此对象保存“ms...”对象中元素的最大值)以及 scheduled.day
的位置对应于`天。我的目标是返回第二个对象列表(“ms...”对象),其中包含条件为真的元素的位置。这是数据:
l <- list(msfr=c(1,5,0,0,0),
msfl=c(1,4,0,5,0),
mshr=c(1,0,0,0,0),
mshl=c(0,0,0,0,4),
vms= c(1,5,0,5,4),
scheduled.day = c(0, 3, 0, 4, 3))
today <- 3
ctt<- which(l[["scheduled.day"]] == today)
我最接近实现我的目标的是使用以下代码。但是通过使用 %in%
正在返回对象的元素位置 msfl
.
obj.names <- names(l)[1:4]
l2 <- lapply(lapply(l[obj.names],"["), function(x){which(x %in% l[["vms"]][ctt])}) # ctt being ignored
> l2
$msfr
[1] 2
$msfl
[1] 2 4
$mshr
integer(0)
$mshl
[1] 5
我正在寻找的是一些简洁的代码,它将返回一个如下所示的列表。
l3 <- list(msfr = 2,
mshl = 5)
> l3
$msfr
[1] 2
$mshl
[1] 5
最佳答案
我一定是瞎了!
lapply(lapply(l[obj.names],"["), function(x){which(x == l[["vms"]] & l[["scheduled.day"]] == today)})
我不知道为什么我以前没有尝试过这个,但它确实有效。如果有人有替代解决方案,我会很高兴看到它。
关于r - 有条件地选择列表中对象的元素位置并返回具有对象元素位置的新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60641285/