我有一个矩阵:
mat <- matrix(c(0,0,0,0,1,1,1,1,-1,-1,-1,-1), ncol = 4 , nrow = 4)
并且我应用以下函数来过滤仅包含正条目的列,但是对于包含负条目的列,我得到NULL
。我怎样才能抑制NULL
期从输出lapply
,apply
和sapply
?
> lapply(as.data.frame(mat), function(x) { if( all(x >= 0) ){return(x)} })
$V1
[1] 0 0 0 0
$V2
[1] 1 1 1 1
$V3
NULL
$V4
[1] 0 0 0 0
> sapply(as.data.frame(mat), function(x) { if( all(x >= 0) ){return(x)} })
$V1
[1] 0 0 0 0
$V2
[1] 1 1 1 1
$V3
NULL
$V4
[1] 0 0 0 0
> apply(mat, 2, function(x){if (all(x >= 0)){return(x)}})
[[1]]
[1] 0 0 0 0
[[2]]
[1] 1 1 1 1
[[3]]
NULL
[[4]]
[1] 0 0 0 0
谢谢你的帮助。
怎么样
dd <- as.data.frame(mat)
dd[sapply(dd,function(x) all(x>=0))]
?
sapply(...)
返回一个逻辑向量(在这种情况下为TRUE TRUE FALSE TRUE
),该逻辑向量说明各列是否具有所有非负值。或者
dd[apply(mat>=0,2,all)]
在这种情况下,我们使用apply(...,2,...)
原始矩阵来生成逻辑索引向量。
或者
mat[,apply(mat>=0,2,all)]
在这种情况下,由于我们正在索引矩阵,因此我们[,logical_vector]
可以选择列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句