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]]
Its a FAQ. http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f On 2/25/07, Monika Kerekes <mkerekes at web.de> wrote:> 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. >
If I understand the question correctly, I would do this: for (i in 1:54) assign( paste('input',i,sep='') , matrix( dataset$variable, nrow=1) ) You now have 54 matrices, named input1, input2, ... input54, each having 1 row and as many columns as dataset$variable is long. (also, they're identical, since all are created from the same object, dataset$variable) See, of course, the help page for assign() to see why this works. However, I do wonder, in the bigger picture of what you're trying to do, whether there isn't a better way. For example, why matrices, since they all have only one row? -Don At 5:02 PM +0100 2/25/07, Monika Kerekes wrote:>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.-- -------------------------------------- Don MacQueen Environmental Protection Department Lawrence Livermore National Laboratory Livermore, CA, USA
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 globalenvironment> 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. >