[R] Looping and paste

Dennis Murphy djmuser at gmail.com
Thu Nov 24 09:12:21 CET 2011


Hi:

There are two good reasons why the loop solution is not efficient in
this (and related) problem(s):

(i) There is more code and less transparency;
(ii) the vectorized solution is four times faster.

Here are the two proposed functions:

# Vectorized version
m1 <- function(v) paste(v, ' to ', v + 50, ' mN', sep = '')

# Loop version:
m2 <- function(v) {
      out <- rep(NA, length(v))
      for(i in seq_along(v)) out[i] <- paste(v[i], ' to ', v[i] + 50,
' mN', sep = '')
      out
    }
BndY <- seq(from = 18900, to = 19700, by = 50)

> identical(m1(BndY), m2(BndY))
[1] TRUE

# Put them to the test:
> system.time(replicate(10000, m1(BndY)))
   user  system elapsed
   0.67    0.00    0.67
> system.time(replicate(10000, m2(BndY)))
   user  system elapsed
   2.67    0.00    2.67

The vectorized version is four times faster and produces the same
output as the loop version. Experiments with a longer test vector (501
elements) maintained the timing ratio.

Dennis


On Wed, Nov 23, 2011 at 7:00 PM, markm0705 <markm0705 at gmail.com> wrote:
> Thank you
>
> On Thu, Nov 24, 2011 at 7:31 AM, B77S [via R] <
> ml-node+s789695n4102066h98 at n4.nabble.com> wrote:
>
>> out <- vector("list")
>> Ylab <- for(i in 1:length(BndY))
>> {
>> out[i] <- paste(BndY[i]," to ",BndY[i],"mN")
>> }
>>
>> Ylab <- do.call(c, out)
>>
>>
>>
>>
>>
>>  markm0705 wrote
>> Dear R helpers
>>
>> I'm trying to make up some labels for plot from this vector
>>
>> BndY<-seq(from = 18900,to= 19700, by = 50)
>>
>> using
>>
>> Ylab<-for(i in BndY) {c((paste(i," to ",i+50,"mN")))}
>>
>> but the vector created is NULL
>>
>> However if i use
>>
>> for(i in BndY) {print(c(paste(i," to ",i+50,"mN")))}
>>
>> I can see the for loop is making the labels I'm looking for but not sure
>> on my error in assigning them to a vector
>>
>> Thanks in advance
>>
>>
>>
>> ------------------------------
>>  If you reply to this email, your message will be added to the discussion
>> below:
>> http://r.789695.n4.nabble.com/Looping-and-paste-tp4101892p4102066.html
>> To unsubscribe from Looping and paste, click here<http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4101892&code=bWFya20wNzA1QGdtYWlsLmNvbXw0MTAxODkyfDExNDQyODMxMDM=>
>> .
>> NAML<http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.InstantMailNamespace&breadcrumbs=instant+emails%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>
>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Looping-and-paste-tp4101892p4102553.html
> Sent from the R help mailing list archive at Nabble.com.
>        [[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.
>



More information about the R-help mailing list