首页 > 解决方案 > 如何从r中的列表列表中删除零向量

问题描述

问题:

我有一个包含三个向量的两个列表的列表。我想从每个子列表中删除零向量。

例子:

x <- list(x1=c(0,0,0), x2=c(3,4,5), x3=c(45,34,23))
y <- list(y1=c(2,33,4), y2=c(0,0,0), y3=c(4,5,44))
z <- list(x, y)

尝试:

我试过这个:

res <- lapply(1:2, function(i) {lapply(1:3, function(j) z[[i]][[j]][z[[i]][[j]] != 0])})

这给了我这个:

> res
[[1]]
[[1]][[1]]
numeric(0)

[[1]][[2]]
[1] 3 4 5

[[1]][[3]]
[1] 45 34 23


[[2]]
[[2]][[1]]
[1]  2 33  4

[[2]][[2]]
numeric(0)

[[2]][[3]]
[1]  4  5 44

输出问题:

我不想numeric(0)

预期输出:

x= list(x2, x3)
y=list(y1, y3)

请问有什么想法吗?

标签: r

解决方案


tidyverse如果嵌套列表结构不重要,您可以尝试

library(tidyverse)
z %>% 
  flatten() %>% 
  keep(~all(. != 0))
$x2
[1] 3 4 5

$x3
[1] 45 34 23

$y1
[1]  2 33  4

$y3
[1]  4  5 44

推荐阅读