[R] Macros in R

Greg Snow Greg.Snow at intermountainmail.org
Tue Feb 27 20:07:43 CET 2007

Others have pointed you to the answer to your question, but both FAQ
7.21 and the assign help page should really have a big banner at the top
saying "Here Be Dragons".

Using a loop or other automated procedure to create variables in the
main namespace can cause hard to find bugs, accidentally clobber
existing variables, and other non-fun things.

For this type of thing it is usually best to use a list (or an
environment, but I am more comforatable with lists).

For your example you could do something like:

> mymats <- list()
> for (i in 1:54){
+   myname <- paste('mymatrix',i,sep='')
+   mymats[[myname]] <- matrix( # insert whatever code you want here
+ }

A big advantage of this approach is that you can then deal with your
list of matricies as a single unit.  If you want to delete them, you
just delete the list rather than having to delete 54 individual
matricies.  The list can also be saved as a single unit to a file,
passed to another function, etc.

To access a single matrix (for example 'mymatrix5' which is in position
5) you have several options:

> mean( mymats[[5]] )
> mean( mymats[['mymatrix5']] )
> with( mymats, mean(mymatrix5) )
> attach(mymats)
> mean(mymatrix5) # as long as there is not a mymatrix 5 in the global
> detach()

And probably others.

Hope this helps,

Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at intermountainmail.org
(801) 408-8111

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Monika Kerekes
> Sent: Sunday, February 25, 2007 9:03 AM
> To: r-help at stat.math.ethz.ch
> Subject: [R] Macros in R
> Dear members,
> I have started to work with R recently and there is one thing 
> which I could not solve so far. I don't know how to define 
> macros in R. The problem at hand is the following: I want R 
> to go through a list of 1:54 and create the matrices input1, 
> input2, input3 up to input54. I have tried the following:
> for ( i in 1:54) {
>       input[i] = matrix(nrow = 1, ncol = 107)
>       input[i][1,]=datset$variable
> }
> However, R never creates the required matrices. I have also 
> tried to type input'i' and input$i, none of which worked. I 
> would be very grateful for help as this is a basic question 
> the answer of which is paramount to any further usage of the software.
> Thank you very much
> Monika
> 	[[alternative HTML version deleted]]
> ______________________________________________
> R-help at stat.math.ethz.ch 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