r - 有条件地选择列表中对象的元素位置并返回具有对象元素位置的新列表

标签 r list lapply

我有一个包含很多对象的列表;在这个 MWE 的情况下 - 只有 6。我有兴趣为对象选择元素的位置 msfr , msfl , mshrmshl对应于 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/

相关文章:

r - 什么是社区检测中的成员资格?

java - 如何在 Java 中创建 vector 列表或列表数组

r - 在 R 中的数据框列表中更改列名称的子集

r - 使用 key 将数字列转换为具有不同标签的因子

r - 匹配字符串在多列上循环

r - 如何在保持列名顺序的同时扩展 tidyr::spread()?

r - 将多个标题表转换为长格式

r - 根据列值拆分数据并创建散点图。

python - 将两个列表组合成字符串

python - 如何找到与数字列表对应的名称?