2013-07-18 120 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的对应元素。

相关问题