2017-02-15 34 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的建議會比你的或者我的表現要好,如果它擴大了。 –