如何在R语言中基于现有矩阵生成符合指定运算规则的新矩阵
问题说明
现有1个30行12列的矩阵,需要基于原始矩阵生成新矩阵,运算规则如下:
- 前6列的元素值为原始矩阵对应元素的2倍
- 第7至11列的元素值为原始矩阵对应元素的1.5倍
- 第12列元素值与原始矩阵完全一致
原代码错误原因
你写的代码核心问题是for循环的大括号配对错误:原代码在if(j<7)的逻辑执行完后就直接闭合了for循环的},导致else if和else分支完全在循环体外,不会随着j的遍历执行,最终只有前6列会被赋值,剩余列全为NA。
修正方案
1 修复原for循环写法
调整大括号位置,把所有条件分支都包裹在for循环内:
sales=matrix(rpois(360, 10), nrow=30) sales_dol=matrix(, nrow=30, ncol=12) for (j in 1:12) { if (j<7) { sales_dol[,j]=sales[,j]*2 } else if (j<12){ sales_dol[,j]=sales[,j]*1.5 } else{ sales_dol[,j]=sales[,j] } } sales_dol
2 更高效的向量化写法(无需循环)
R支持矩阵的向量化运算,直接构造每列对应的乘数向量即可,代码更简洁执行效率更高:
sales <- matrix(rpois(360, 10), nrow=30) # 按列指定乘数:前6列乘2,中间5列乘1.5,最后1列乘1 col_multiplier <- rep(c(2, 1.5, 1), c(6, 5, 1)) sales_dol <- sales * col_multiplier
内容的提问来源于stack exchange,提问作者aevanso1
相关产品推荐
相关产品推荐

