R语言 如何为列表中的项设置子集

1tuwyuhd  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(156)

考虑一下

li <- list(c(1,1,1), c(2,1,1), c(5,1,0))
## [[1]]
## [1] 1 1 1                <-- 0 modulo 3
## 
## [[2]]
## [1] 2 1 1
## 
## [[3]]
## [1] 5 1 0                <--- 0 modulo 3

我想保留列表中模3和等于零的所有项(或关于列表中项的其他逻辑表达式)。
密码

new <- list()
  idx <- 1
  for (i in seq_along(li) ) {
    nxt <- li[[i]]
    if ((sum(nxt) %% 3) == 0) {
      new[idx] <- list(nxt)
      idx <- idx + 1
    } 
  }
## new
## [[1]]
## [1] 1 1 1
##
## [[2]]
## [1] 5 1 0

然而。我想要一个矢量化的解决方案。我试过了。

new <- subset(li, lapply(li, (sum %% 3) == 0 ))

但无济于事。

编辑有关详细信息,请参阅Difference between subset and filter from dplyr

3pmvbmvn

3pmvbmvn1#

在碱R中:

Filter(\(x)!sum(x)%%3, li)
[[1]]
[1] 1 1 1

[[2]]
[1] 5 1 0

整齐地

purrr::keep(li, ~!sum(.x)%%3)
[[1]]
[1] 1 1 1

[[2]]
[1] 5 1 0

purrr::discard(li, ~!!sum(.x)%%3) # !0
[[1]]
[1] 1 1 1

[[2]]
[1] 5 1 0

相关问题