微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R 中的每一列中填充矩阵的更简单方法

如何解决在 R 中的每一列中填充矩阵的更简单方法

我想创建一个矩阵,每列必须有一个元素复制 n-1 次,就像我下面的代码一样。但我想避免矩阵构造中的所有这些 rep 函数。有没有更简单的方法?>

p1 = c(1,0.75,0.7,0.65,0.55,0.5,0.3);p1
d = length(p1)
m1 = matrix(c(rep(1,d),rep(0.75,rep(0.7,rep(0.65,rep(0.55,rep(0.5,rep(0.3,d)),d,d)

for (i in 1:(nrow(m1)-1)) {
  for (j in (i+1):ncol(m1)) {
    m1[i,j] = 0
  }
}

m1 

解决方法

对于构造 matrix 一个更简单的选项是

m1 <- matrix(p1,d,byrow = TRUE)

或使用 rep

m1 <- do.call(rbind,rep(list(p1),d))

或使用 replicate

m1 <- t(replicate(d,p1))

可以用 for 中的 upper.tri 替换 base R 循环以返回逻辑 vector 并将这些元素分配给 0

m2 <- data.table::copy(m1)
m2[upper.tri(m2,diag = FALSE)] <- 0

-使用 OP 的输出进行测试

identical(m1,m2)
#[1] TRUE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。