这可能是一个非常微不足道的问题,但我还没有找到一个可行的解决方案。这里有一个类似的问题,但它没有得到可行的答案,所以我很感激任何建议。
我有一个简单的3x3矩阵,想要将第二列乘以一个固定因子。 例如:
m<-matrix(rep(c(1,2,3),1*3),nrow=3)
m
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
如果我尝试m[,2]*5
,它会给我[1] 5 10 15
我想要的结果如下:
[,1] [,2] [,3]
[1,] 1 5 1
[2,] 2 10 2
[3,] 3 15 3
它可能会那么困难,不是吗?
答案 0 :(得分:1)
只需像m[,2] <- m[,2]*5
答案 1 :(得分:0)
我认为比单列分配更通用的方法是sweep
,其中包含向量c(1,5,1)
:
sweep(m, 2, c(1,5,1), "*")
[,1] [,2] [,3]
[1,] 1 5 1
[2,] 2 10 2
[3,] 3 15 3
然后,您可以将单个矢量应用于矩阵,而不需要重复单列操作:
sweep(m, 2, c(2,5,10), "*")
[,1] [,2] [,3]
[1,] 2 5 10
[2,] 4 10 20
[3,] 6 15 30
@ akrun在评论m*c(1, 5, 1)[col(m)]
中的解决方案似乎有效地做到了这一点,但我很难理解它是如何工作的。它似乎取决于操作的优先级,如果它已被写成,我会更容易理解:c(1, 5, 1)[col(m)]*m
。这样可以更清楚地计算向量c(1, 5, 1)[col(m)]
,而不是m*c(2,5,10)
提取[col(m)]
。