从矩阵列表中删除矩阵
我有一个由 12 个矩阵组成的列表,M我试图从列表中删除每个矩阵,其中包含 0 行。
我知道我可以手动删除这些矩阵 (例如,删除第二个矩阵) M[2] <- NULL。我想使用逻辑来删除它们,例如:(M <- M[nrow(M)>0,]但这显然不起作用)。
回答
可以工作的另一个选择是Filter在base R
Filter(nrow, M)
之所以有效,是因为 0 被视为 FALSE,所有其他值都被视为 TRUE
如果也有一些属性,gv从collapse可以维护它
library(collapse)
gv(M, function(x) nrow(x) > 0)
- super elegant `Filter` approach! +1!
回答
使用sapply()得到非零矩阵的逻辑向量,然后使用该向量来选择/子集:
nzm <- sapply(M, function(m) nrow(m)>0)
M <- M[nzm]