2017-02-15 50 views
2

这可能是一个非常微不足道的问题,但我还没有找到一个可行的解决方案呢。这里发布了类似的问题,但没有得到可行的答案,所以我很感激任何建议。用固定因子乘以一列矩阵

我有一个简单的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 

它不可能是那么难,能它?

+6

只是分配它'm [,2] < - m [,2] * 5'或不分配'm * c(1,5,1)[col(m)]' – akrun

+1

是的,谢谢! – Jane

+0

我把这个作为答案,以便将来查找。 – PinkFluffyUnicorn

回答

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's solution i评论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)]提取的。

+0

这似乎有点过度去做't(t(m)* c(1,5,1))'等等 –

+0

我不知道做两个转置似乎对你来说很简单。这似乎并不适合我。我猜测akrun的建议会比你的或者我的表现要好,如果它扩大了。 –