套用,套用和膝部返回NULL

柯西

我有一个矩阵:

mat <- matrix(c(0,0,0,0,1,1,1,1,-1,-1,-1,-1), ncol = 4 , nrow = 4)

并且我应用以下函数来过滤仅包含正条目的列,但是对于包含负条目的列,我得到NULL我怎样才能抑制NULL期从输出lapplyapplysapply

> 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章