gpt4 book ai didi

r - R 中的 lower.tri() 示例

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

这个星期五下午我的大脑不能太敏锐。在 R 中 lower.tri() 函数的示例中 http://stat.ethz.ch/R-manual/R-patched/library/base/html/lower.tri.html ,您可以将矩阵的所有下三角元素转换为 NA,如下所示。

(m2 <- matrix(1:20, 4, 5))
lower.tri(m2)
m2[lower.tri(m2)] <- NA
m2

而不是覆盖现有的m2对象,我如何将结果保存在一个新对象中,比如 m3

我试过:

m3 <- m2[lower.tri(m2)] <- NA
m3

返回 NA

我可以通过将整个事物包装在一个函数中来获得我想要的结果。

lower.tri.na <- function(m2) {
m2[lower.tri(m2)] <- NA
return(m2)
}
m3 <- lower.tri.na(m2)
m3

下面这段代码也有效(但我真的想使用 lower.tri() 函数):

m3 <- ifelse(row(m2) > col(m2), NA, m2)

是否有更好(更有效)的方法?...我猜是的。 (还有一个愚蠢的问题,为什么这个代码或评估风格不起作用 m3 <- m2[lower.tri(m2)] <- NA)。提前致谢。

最佳答案

最简单的答案是

m3<-m2
m3[lower.tri(m3)] <- NA

或者你可以做

m3<-`[<-`(m2, lower.tri(m2), NA)

这看起来很尴尬,但确实有效。您基本上是在拦截来自 []<- 的值通常用什么替换赋值中的变量并将其发送到新变量。\

还有你的策略m3 <- m2[lower.tri(m2)] <- NA不起作用,因为当你做 a <- b <- c这与 a <- (b <- c) 相同与 a <-c; b<-c 相同因为赋值运算符通常会传递等式右侧的内容。所以你只是在做 m3<-NA .矩阵有一个特殊的运算符 [<-这将 reshape NA根据您作为索引提供的内容,为其尺寸设置适当的大小。但是在这里,您没有使用 []m3 上所以你没有得到那种特殊的行为

关于r - R 中的 lower.tri() 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23573751/

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