【问题标题】:Subsetting a list based on a conditions of sublists in R?根据R中子列表的条件对列表进行子集?
【发布时间】:2020-09-09 17:47:17
【问题描述】:

我希望获得一些关于如何使用 apply 系列函数来实现这一点的指示。我有一个列表 (listbin),并希望使用列表的子列表 (x 和不合格) 中的内容进行子集化。

列表结构如下图:

[[1]]
[[1]]$x
[1] "2015-01-12"

[[1]]$rslts
factor(0)
Levels: PD

[[1]]$Ineligible
[1] 0

[[2]]$x
[[1]]$rslts
factor(0)
Levels: 0 1 A CR D E IS PD PR SD

[[1]]$Ineligible
[1] 0

...

出于我的目的,这段代码非常适用于我的 1、2 和 3 个子列表,但我正在寻找一种优雅的方式来在我的子列表中执行此操作。

'[['(listbin, 1)$x [which( '[['(listbin, 1)$Ineligible==0 ) ]
'[['(listbin, 2)$x [which( '[['(listbin, 2)$Ineligible==0 ) ]
'[['(listbin, 3)$x [which( '[['(listbin, 3)$Ineligible==0 ) ]

【问题讨论】:

  • 你能举一个你的listbin的例子吗?

标签: r list subset


【解决方案1】:

我们可以创建一个函数,然后遍历索引并提取组件

f1 <- function(lst1, i, nm1, nm2){
    '[['(lst1, i)[[nm1]] [which( '[['(lst1, i)[[nm2]]==0 ) ]  
   }

lapply(1:3, function(i) f1(listbin, i = i, 'x', 'Ineligible'))

【讨论】:

  • 谢谢 - 这行得通。一个问题:如何动态返回列表的长度 (1:n) 以在 lapply 语句中使用?
  • @user1916067 如果n 是参数,那么您可以使用lappy(seq_len(n), 如果这就是您的意思
猜你喜欢
  • 2021-08-01
  • 2015-11-27
  • 2020-08-19
  • 2014-02-20
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多