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

Simpler way of filling a matrix in each column in R

我想创建一个矩阵,每个列必须有一个元素像我的代码一样被复制 n-1 次 below.But 我想避免矩阵中的所有这些 rep 函数 construction.Is更简单的方法?

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,d),rep(0.7,d),
              rep(0.65,d),rep(0.55,d),rep(0.5,d),
              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, d, byrow = TRUE)

或使用rep

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

或使用replicate

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

for循环可以用base R中的upper.tri替换为return一个逻辑vector并将这些元素赋值给0

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

-使用 OP 的输出进行测试

identical(m1, m2)
#[1] TRUE