这个星期五下午我的大脑一定不能太敏锐,在来自 Rhttp://stat.ethz.ch/R-manual/R-patched/library/base/html/lower.tri.html中的 lower.tri()函数的示例中,您可以将矩阵的所有下三角元素转换为 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)
有没有更好(更有效)的方法?...我的猜测是肯定的。(和愚蠢的问题为什么这个代码或风格的 assingment 工作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
。有一个特殊的矩阵运算符,称为[<-
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(55条)