[R] "=" in functions and matlab (was: Multiplying each row of a big matrix with a vector)

Robin Hankin r.hankin at noc.soton.ac.uk
Wed Jan 30 09:56:47 CET 2008


hits=-2.6 tests=BAYES_00
X-USF-Spam-Flag: NO

[this after a mistakenly private email to Megh]

As others have said,   "%*%" is sufficiently vectorized to do
what you want.

Speaking as a reformed Matlab user,
it might be as well to add that the  definition of function fu()
that you give looks like matlab code to me.


Check this out:


 > f <- function(x){f = x^2}
 > f(4)
 >
 > dput(f(4))
16
 >


Thus fu() returns 16 but invisibly.  This can be terribly
confusing to those from a matlab background.



In R, one can just write

 > f<- function(x){x^2}

because functions return the last evaluated expression.

Compare matlab, where(IIRC) one has to state in the function
the name of the variable whose value will be returned.


HTH

rksh





On 30 Jan 2008, at 07:20, Megh Dal wrote:

> I have a big matrix 'ret'. I want to multiply each row of it with a  
> 2nd vector 'pos', resulting result, I want to save in a vector named  
> 'port'. I wrote following code:
>
>> pos
> [1]  2593419  2130220  6198197  1673888  1980000  1784732  2052120  
> -7490228 -5275000
>
>
>> dim(ret)
> [1] 500   9
>
>> fu    # user defined function
> function(x)
>   {
>    fu = x %*% t(pos)
>   }
> port = apply(ret, 1, fu)
>
>> dim(port)
> [1]  81 500
>
>  My desire is to get port as a vector with length 500. However I am  
> not getting that?
>
>  Can anyone tell me how to correct that?
>
>  Regards,
>
>
>
> ---------------------------------
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

--
Robin Hankin
Uncertainty Analyst and Neutral Theorist,
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743



More information about the R-help mailing list