R 使用循环使用创建矩阵
作为练习,我被要求使用回收来启动一个4×5矩阵,其中前三行为0,第四行为4、8、12、16、20 我理解循环的定义是,如果数学运算中两个向量的长度不匹配,则重复较短的向量,直到其长度与较大向量的长度匹配。我试图通过以下内容和其他内容创建一个矩阵R 使用循环使用创建矩阵,r,matrix,recycle,R,Matrix,Recycle,作为练习,我被要求使用回收来启动一个4×5矩阵,其中前三行为0,第四行为4、8、12、16、20 我理解循环的定义是,如果数学运算中两个向量的长度不匹配,则重复较短的向量,直到其长度与较大向量的长度匹配。我试图通过以下内容和其他内容创建一个矩阵 x = matrix(0,nrow=4,ncol=5) + c(4,8,12,16,20) 当然,这是不正确的,所以我想知道我在这里遗漏了什么。非常感谢您的帮助。如果您希望替换最后一行,请使用替换为行/列索引 replace(matrix(0,nro
x = matrix(0,nrow=4,ncol=5) + c(4,8,12,16,20)
当然,这是不正确的,所以我想知道我在这里遗漏了什么。非常感谢您的帮助。如果您希望
替换最后一行,请使用替换为行/列索引
replace(matrix(0,nrow=4,ncol=5), cbind(4, 1:5), c(4,8,12,16,20))
# [,1] [,2] [,3] [,4] [,5]
#[1,] 0 0 0 0 0
#[2,] 0 0 0 0 0
#[3,] 0 0 0 0 0
#[4,] 4 8 12 16 20
还是做作业
m1 <- matrix(0,nrow=4,ncol=5)
m1[nrow(m1),] <- c(4,8,12,16,20)
或者另一个选项是将循环的逻辑向量与rep
复杂的值向量相乘,将值更改为0,然后构造矩阵
matrix(rep(c(4, 8, 12, 16, 20), each = 4) * c(FALSE, FALSE, FALSE, TRUE), 4, 5)
# [,1] [,2] [,3] [,4] [,5]
#[1,] 0 0 0 0 0
#[2,] 0 0 0 0 0
#[3,] 0 0 0 0 0
#[4,] 4 8 12 16 20
在向量参数上调用时,rbind
返回一个矩阵并循环使用太短的向量,从而形成一个简单而优雅的解决方案:
rbind(0, 0, 0, c(4, 8, 12, 16, 20))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0 0 0 0 0
# [2,] 0 0 0 0 0
# [3,] 0 0 0 0 0
# [4,] 4 8 12 16 20
使用模(%%
):
写得更一般一些:
nr = 4
nc = 5
v = seq(nr * nc)
matrix(v * (v %% nr == 0), nrow = nr)
下面是另一个使用矩阵与向量相乘的版本:
matrix(rep(c(0,0,0,1),5),ncol=5)* c(16,12,8,4,20)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 4 8 12 16 20
…还有另一个版本:
t(matrix(c(rep(0,15),rep(1,5)),ncol=4) * c(4,8,12,16,20))
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 4 8 12 16 20
有没有一种方法可以使用循环和仅使用矩阵()函数?matrix(1:20*(1:20%%4==0),nrow=4)
matrix(rep(c(0,0,0,1),5),ncol=5)* c(16,12,8,4,20)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 4 8 12 16 20
t(matrix(c(rep(0,15),rep(1,5)),ncol=4) * c(4,8,12,16,20))
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 4 8 12 16 20