Skip to content

Looping and paste

12 messages · markm0705, Brad Patrick Schneid, Bert Gunter +4 more

#
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 

--
View this message in context: http://r.789695.n4.nabble.com/Looping-and-paste-tp4101892p4101892.html
Sent from the R help mailing list archive at Nabble.com.
#
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
--
View this message in context: http://r.789695.n4.nabble.com/Looping-and-paste-tp4101892p4102066.html
Sent from the R help mailing list archive at Nabble.com.
#
Don't do this!  paste() is vectorized.

paste (BndY,"to",50+seq_len(BndY), "mN", sep = " ")

Cheers,
Bert
On Wed, Nov 23, 2011 at 3:31 PM, B77S <bps0002 at auburn.edu> wrote:

  
    
#
... and you can of course do the assignment:

Bndy <-  paste (BndY,"to",50+seq_len(BndY), "mN", sep = " ")

"An Introduction to R" tells you about such fundamentals and should be
a first read for anyone learning R.

--- Bert
On Wed, Nov 23, 2011 at 4:10 PM, Bert Gunter <bgunter at gene.com> wrote:

  
    
#
Try this instead:

Ylab <- paste(BndY, BndY+50, "mN")

Michael
On Wed, Nov 23, 2011 at 5:26 PM, markm0705 <markm0705 at gmail.com> wrote:
#
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)
[1] TRUE

# Put them to the test:
user  system elapsed
   0.67    0.00    0.67
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:
#
It's very seldom that I disagree with
Bert, but here is one time.

I don't think "An Introduction to R" is
a suitable first read for people with
little computational experience.

Better (I modestly suggest) would be:

http://www.burns-stat.com/pages/Tutor/hints_R_begin.html

which includes some other references.
'Hints' is imperfect and incomplete but
it suffers slightly less from the curse of
knowledge than a lot of other R documentation.

Pat
On 24/11/2011 00:15, Bert Gunter wrote:

  
    
#
On Thu, Nov 24, 2011 at 9:27 AM, Patrick Burns <pburns at pburns.seanet.com> wrote:
I must agree with Patrick here. The 'Intro to R' may be appropriate
for someone already versed in statistics and/or programming, but it is
hardly useful as a first read for the neophytes.
To chip in, the first two chapters of Fox and Weisberg (2011) make for
an excellent introduction to R programming. It's gentle, but also
covers many of the difficulties and misunderstandings that one would
encounter in R.

Regards
Liviu

  
    
  
#
Pat:

1. Thank you for this. Having not read your tutorial, but based on
what I know of your other efforts, I am sure that you are correct. Is
there a link to this on CRAN somewhere so I can refer to it in future
(too lazy to search myself)?

2. Thank you also for your continuing contributions to R
documentation. I know this takes a lot of work and you do it well.
Would that more R learners would read them -- there would be a lot
less "RTFM" type queries on r-help.

Best,
Bert

On Thu, Nov 24, 2011 at 12:27 AM, Patrick Burns
<pburns at pburns.seanet.com> wrote:

  
    
#
Bert,

Your laziness is well founded -- it
is not on CRAN, you have to go all
the way over to another website.

And thanks for the kind words (even
though we Europeans are free to be
ingrates today).

Pat
On 24/11/2011 14:23, Bert Gunter wrote: