2013-07-18 56 views

回答

11

我認爲這是你在找什麼...

t(t(mat) * vec) 
    [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 1 2 3 4 

*像R中大多數其他運營商的矢量化。 t是必要的,因爲R將以列方式回收。該apply的解決方案是:

t(apply(mat , 1 , `*` , vec)) 
    [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 1 2 3 4 
+0

完美,謝謝 –

+0

@JessicaB歡迎您! :-) –

3

使用apply

> t(apply(mat,1 , function(x) x*vec)) 
    [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 1 2 3 4 
+0

非常優雅的方式,就像西蒙一樣。我贊成你的,因爲我喜歡把這個函數包含在一個單獨的部分中,而不是用逗號分隔 –

2

我不得不說,最優雅的方式去了解這是:

mat=matrix(1,2,4) 
vec=1:4 
new.mat=t(vec*t(mat)) 
1

我喜歡sweep,雖然我認爲它稍微慢一些:

sweep(mat,MARGIN=2,vec,"*") 

MARGIN=2指定每個(margin 2)應該乘以vec的對應元素。

相關問題