У меня есть список многих объектов; в случае этого MWE - только 6. Меня интересует выбор позиции элемента для объектов msfr
, msfl
, mshr
и mshl
, которые соответствуют соответствующему значению в vms
(этот объект содержит максимальное значение элементов в объектах 'ms ...') и где scheduled.day
соответствует `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