Bram Kuijper
2008-Jan-08 14:11 UTC
[R] storing matrices in a list or vector and preserve dimensions
Hi all, As an R newbie, I wonder how I can store multiple matrices in a list() or vector() object without losing their structure. I should be able to retrieve the matrix from the list later on. If I just append() the matrices to a list() object, they automatically lose their dimensions, whereas I would like to preserve the dimensions of the matrices. Is there any function in R which allows me to store a _fully preserved_ object inside a list() or vector() structure? thanks in advance, Bram Kuijper PS: this is what I do: # two matrices, which are my objects to be put in the list my_matrix_object1 <- matrix(data=rep(1,times=9),nrow=3,ncol=3); my_matrix_object2 <- matrix(data=rep(0,times=9),nrow=3,ncol=3); my_list <- list() # note that I explicitly want to append the object to the list # instead of directly inserting it from the beginning # (e.g., code to be used in a for-loop) my_list <- append(my_list,as.matrix(my_matrix_object1)); my_list <- append(my_list,as.matrix(my_matrix_object2)); However, this results in the following list structure... [[1]] [1] 1 [[2]] [1] 1 [[3]] [1] 1 ... etcetera, whereas I just want to preserve the matrix structure in my list: my_matrix_object1; [,1] [,2] [,3] [1,] 1 1 1 [2,] 1 1 1 [3,] 1 1 1 , [,1] [,2] [,3] [1,] 0 0 0 [2,] 0 0 0 [3,] 0 0 0 I guess I need a more sophisticated function then append, but I do not know which one?
Gabor Csardi
2008-Jan-08 14:17 UTC
[R] storing matrices in a list or vector and preserve dimensions
Bram, On Tue, Jan 08, 2008 at 03:11:07PM +0100, Bram Kuijper wrote:> Hi all, > > As an R newbie, I wonder how I can store multiple matrices in a list() > or vector() object without losing their structure. I should be able to > retrieve the matrix from the list later on. > > If I just append() the matrices to a list() object, they automatically > lose their dimensions, whereas I would like to preserve the dimensions > of the matrices.append concatenates two list (as far as i can remember), but not a list and a list element. A simple workaround is to use l <- append(l, list(e)) instead of l <- append(l, e)> Is there any function in R which allows me to store a _fully preserved_ > object inside a list() or vector() structure?You can also do things like l <- list(1,2,3) l[[2]] <- 5 l[[10]] <- matrix(runif(100), 10, 10) etc. For more you should really read 'Introduction to R', see the documentation links on the R homepage. Gabor> thanks in advance, > > Bram Kuijper > > > > > PS: this is what I do: > > # two matrices, which are my objects to be put in the list > my_matrix_object1 <- matrix(data=rep(1,times=9),nrow=3,ncol=3); > my_matrix_object2 <- matrix(data=rep(0,times=9),nrow=3,ncol=3); > > my_list <- list() > # note that I explicitly want to append the object to the list > # instead of directly inserting it from the beginning > # (e.g., code to be used in a for-loop) > my_list <- append(my_list,as.matrix(my_matrix_object1)); > my_list <- append(my_list,as.matrix(my_matrix_object2)); > > However, this results in the following list structure... > [[1]] > [1] 1 > > [[2]] > [1] 1 > > [[3]] > [1] 1 > > ... etcetera, > > whereas I just want to preserve the matrix structure in my list: > > my_matrix_object1; > [,1] [,2] [,3] > [1,] 1 1 1 > [2,] 1 1 1 > [3,] 1 1 1 > , > [,1] [,2] [,3] > [1,] 0 0 0 > [2,] 0 0 0 > [3,] 0 0 0 > > I guess I need a more sophisticated function then append, but I do not > know which one? > > ______________________________________________ > 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.-- Csardi Gabor <csardi at rmki.kfki.hu> MTA RMKI, ELTE TTK