gpt4 book ai didi

r - 套用,套用和膝部传回NULL

转载 作者:行者123 更新时间:2023-12-04 03:20:27 25 4
gpt4 key购买 nike

我有一个矩阵:

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

并且我应用以下函数来过滤仅包含正条目的列,但是对于具有负条目的列,我得到了 NULL。如何从 NULLlapplyapply的输出中抑制 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]选择列。

    关于r - 套用,套用和膝部传回NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930009/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com