例如, X< - 矩阵(C(1,2,3,4),2,2)
1 2
3 4
我想像这样分别向矩阵的每个元素添加常量“c”。
迭代1
1 + c 2
3 4
迭代2
1 2 + c
3 4
迭代3
1 2
3 + c 4
迭代4
1 2
3 4 + c
我尝试了以下R代码,但在执行第二次迭代时保留了更新后的值。
x= matrix of order nxm
for(i in 1:r)
{
for(j in 1:c)
{
x[i,j]=x[i,j]+c
print(x)
}
}
在此代码中,值会更新并打印每次迭代的更新值。
请帮帮我...先谢谢。
答案 0 :(得分:0)
您只需制作矩阵的副本:
x_safely_stored <- matrix of order nxm
for(i in 1:r) {
for(j in 1:c) {
x <- x_safely_stored
x[i,j]=x[i,j]+c
print(x)
}
}
答案 1 :(得分:0)
R
更喜欢数组操作。
任何矩阵x
只是其条目的数组,逐列布局。您可以将常量c
连续添加到第一个,第二个,第三个,...条目到x
的副本,以便原始x
保持不变。通过构造与x
相同长度的数组来完成此操作,除了c
之外的所有零条目都在所需位置。本文末尾显示的代码通过连接一堆零c
和更多零来实现此目的,以便c
出现在i
位置:
c(rep(0,i-1), cnst, rep(0,n-i)
如果您使用i = 1,2,3等循环,结果将在x
的每一列向下移动,从左向右移动。要按照问题中显示的顺序执行操作,这些操作贯穿每一行,从上到下移动,只需将过程应用于x
的转置并转置输出。
即使对于大型矩阵,添加整个阵列的方法在我的系统上至少比将c
添加到i
副本的x
位置快两倍。
以下是一般程序的R
代码。它适用于任何非空矩阵x
。注意:输出包含length(x)
x
个副本,因此可能非常大。在这个例子中 - 在我的系统上运行大约需要一秒钟 - x
有10,000个条目,因此输出有100,000,000个条目。您可能想先在较小的矩阵上测试它!
x <- matrix(1:(100^2), 100) # Any nonempty matrix
cnst <- 1 # Value to add successively to each term in `x`
#
# The algorithm begins here.
#
n <- length(x)
lapply(1:n, function(i) matrix(as.vector(x)+c(rep(0,i-1),cnst,rep(0,n-i)), nrow(x)))