r - 如何从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)
请问有什么想法吗?
解决方案
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
推荐阅读
- vb.net - 类中具有参数 int 和 double 的两个实例构造函数(如果没有缩小转换,就无法调用可访问的“New”)
- python - 程序运行时如何创建线程变量?
- c++ - 为什么静态库中的模板函数在链接到动态库时会崩溃?
- swift - 将 UITextField 限制为仅字母和空格
- powerbi - 从直接服务器获取数据时,如何在 Power BI 中对月份进行排序?
- r - DCC 图显示 2 个图而不是 4 个
- python - “从 osgeo 导入 gdal”错误在 ubuntu 18.04.5 上不起作用
- robots.txt - 如何使用 robots.txt(实时域)隐藏我们的开发和舞台环境?
- c++ - 使用 cout 打印 size_t 会产生不可思议的输出
- spring-boot - Spring Boot 不提供空/零字节静态资产