在 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
我想创建一个矩阵,每个列必须有一个元素像我的代码一样被复制 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