Message-ID: <1354743604.56250.YahooMailNeo@web142603.mail.bf1.yahoo.com>
Date: 2012-12-05T21:40:04Z
From: arun
Subject: data manipulation between vector and matrix
In-Reply-To: <CAE2FW2k2MQzpRFyWNKD_KoZygPeCdufrdVqB=N6UViJM8Dh-Yw@mail.gmail.com>
Hi,
By comparing the different methods:
set.seed(5)
?mat1<-matrix(sample(1:1e6,1e6,replace=TRUE),ncol=10000)
?set.seed(25)
?x<-sample(1:1e6,10000,replace=TRUE)
?system.time(z1<-sweep(-mat1,2,x,"+"))
#?? user? system elapsed
?# 0.076?? 0.000?? 0.069
?system.time(z2<-apply(-mat1,1,`+`,x))
?#? user? system elapsed
?# 0.036?? 0.000?? 0.031
?system.time(z3<-aaply(-mat1,1,`+`,x))
#?? user? system elapsed
#? 1.880?? 0.000?? 1.704
?system.time(z4<- x-t(mat1))? #winner
#?? user? system elapsed
?# 0.004?? 0.000?? 0.007
?system.time(z5<- t(x-t(mat1)))
#?? user? system elapsed
#? 0.008?? 0.000?? 0.009
A.K.
________________________________
From: C W <tmrsg11 at gmail.com>
To: arun <smartpink111 at yahoo.com>
Cc: R help <r-help at r-project.org>; Sarah Goslee <sarah.goslee at gmail.com>
Sent: Wednesday, December 5, 2012 4:11 PM
Subject: Re: [R] data manipulation between vector and matrix
thanks, I knew about apply, but did not you you can put plus signs with quotes. ?That's a cool tricky,
Mike
On Wed, Dec 5, 2012 at 4:05 PM, arun <smartpink111 at yahoo.com> wrote:
HI,
>In addition to ?sweep(), you can use
>
>apply(-mat,1,`+`,x)
>
>#or
>library(plyr)
>aaply(-mat,1,"+",x)
>
>
>A.K.
>
>
>
>
>
>
>
>----- Original Message -----
>From: C W <tmrsg11 at gmail.com>
>To: Sarah Goslee <sarah.goslee at gmail.com>
>Cc: r-help <r-help at r-project.org>
>Sent: Wednesday, December 5, 2012 1:51 PM
>Subject: Re: [R] data manipulation between vector and matrix
>
>Thanks, Sarah.? First time heard about sweep(), it worked just the way I
>wanted.
>Mike
>
>On Wed, Dec 5, 2012 at 1:42 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:
>
>> Hi,
>>
>> On Wed, Dec 5, 2012 at 1:30 PM, C W <tmrsg11 at gmail.com> wrote:
>> > Dear list,
>> > I was curious how to subtract a vector from matrix?
>> >
>> > Say, I have
>> >
>> > mat <- matrix(1:40, nrow=20, ncol=2)
>> >
>> > x <-c(1,2)
>>
>> Thanks for the actual reproducible example.
>>
>> > I want,
>> >
>> > x-mat[1,] and x-mat[2,], and so on... Basically, subtract column elements
>> > of x against column elements in mat.
>> >
>> > But x-mat won't do it.
>>
>> This will (note the modification to get x - mat):
>> > sweep(-mat, 2, x, "+")
>>? ? ? ?[,1] [,2]
>>? [1,]? ? 0? -19
>>? [2,]? ?-1? -20
>>? [3,]? ?-2? -21
>>? [4,]? ?-3? -22
>>? [5,]? ?-4? -23
>> etc.
>>
>> --
>> Sarah Goslee
>> http://www.functionaldiversity.org
>>
>
>??? [[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.
>
>