[R] Basic loop programming

MacQueen, Don macqueen1 at llnl.gov
Wed Jan 9 22:57:57 CET 2013


Yes, R is a different language, and has different syntax and different
built-in functions, so, yes it works differently.

If you want to do it the same way in R as in that other language, you have
to use a different method for constructing the variable names inside the
loop. Here's an example, using the get() and assign() functions to
construct the variable names, essentially replacing your constructions
like  Customers_2012_'i'.

I have four variables, named
  s01, s02
  c01, c02
(sales and customers for two months)

Something like this should do it:

for (i in c('01','02')) {
  assign( paste0('r',i) ,
          get(paste0('s',i))/get(paste0('c',i))
  )
}

I should now have new variables r01 and r02.

This is not tested, so hopefully I got all the parentheses matched.

Of course, that looks cumbersome and ugly, and it is. There are other ways
in R to store your data, for which the code will be much friendlier.

If you use
   i in 1:12
you are creating numbers, but your variable names use character strings,
'01','02', etc. So, no, you can't use
  i in 1:12
directly. But you can use i in 1:12 if you use a formatting function on i
to convert it to a character string with leading zeros. The formatC
function is one such function; there are others.

-Don

-- 
Don MacQueen

Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062





On 1/9/13 8:02 AM, "Paolo Donatelli" <donatellipaolo at gmail.com> wrote:

>Hi all,
>
>newbie question: I am trying to set up a very simple loop without
>succeeding.
>
>Let's say I have monthly observation of two variables for a year
>- Sales_2012_01, Sales_2012_02, Sales_2012_03, ....      (total sales
>for jan 2012,feb 2012, etc.)
>- Customers_2012_01, Customers_2012_02, ....  (total number of
>customers for jan 2012, etc.)
>
>and I want to create new monthly variables in order to compute
>revenues per customers:
>
>Av_revenue_2012_01 = Sales_2012_01 / Customers_2012_01
>Av_revenue_2012_02 = Sales_2012_02 / Customers_2012_02
>...
>
>how can I proceed?
>
>
>In other programming language I used just to write something like
>for (i in list("01","02, ..., "12") {
>Av_revenue_2012_'i' = Sales_2012_'i' / Customers_2012_'i'
>}
>
>but in R it seems not to work like that. Further, and correct me if I
>am wrong, I cannot use simple (i in 1:12) since I have a 0 digit in
>front of the single-digit months.
>
>thanks in advance for your help
>
>______________________________________________
>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