"It would be really really helpful to have a clearer idea of what you are trying to do."
Amen! But in R, "constructing" objects by extending them piece by piece is generally very inefficient (e.g. https://r-craft.org/growing-objects-and-loop-memory-pre-allocation/), although sometimes?/often? unavoidable (hence the relevance of your comment above). R generally prefers to take a "whole object" point of view ( see R books by Chambers, et. al.) and provides code for basic operations like vector/matrix, etc. construction to do so. When this is not possible, I suspect "optimal" efficient strategies for allocating space to build objects gets you into the weeds of how R works. Cheers, Bert On Sat, Mar 2, 2024 at 1:02 AM Richard O'Keefe <rao...@gmail.com> wrote: > > The matrix equivalent of > x <- ... > v <- ... > x[length(x)+1] <- v > is > m <- ... > r <- ... > m <- rbind(m, r) > or > m <- ... > k <- ... > m <- cbind(m, c) > > A vector or matrix so constructed never has "holes" in it. > It's better to think of CONSTRUCTING vectors and matrices rather than > INITIALISING them, > because always being fully defined is important. > > It would be really really helpful to have a clearer idea of what you > are trying to do. > > On Fri, 1 Mar 2024 at 03:31, Ebert,Timothy Aaron <teb...@ufl.edu> wrote: > > > > You could declare a matrix much larger than you intend to use. This works > > with a few megabytes of data. It is not very efficient, so scaling up may > > become a problem. > > m22 <- matrix(NA, 1:600000, ncol=6) > > > > It does not work to add a new column to the matrix, as in you get an error > > if you try m22[ , 7] but convert to data frame and add a column > > > > m23 <- data.frame(m22) > > m23$x7 <- 12 > > > > The only penalty that I know of to having unused space in a matrix is the > > amount of memory it takes. One side effect is that your program may have a > > mistake that you would normally catch with a subscript out of bounds error > > but with the extra space it now runs without errors. > > > > Tim > > > > > > > > -----Original Message----- > > From: R-help <r-help-boun...@r-project.org> On Behalf Of Richard O'Keefe > > Sent: Thursday, February 29, 2024 5:29 AM > > To: Steven Yen <st...@ntu.edu.tw> > > Cc: R-help Mailing List <r-help@r-project.org> > > Subject: Re: [R] Initializing vector and matrices > > > > [External Email] > > > > x <- numeric(0) > > for (...) { > > x[length(x)+1] <- ... > > } > > works. > > You can build a matrix by building a vector one element at a time this way, > > and then reshaping it at the end. That only works if you don't need it to > > be a matrix at all times. > > Another approach is to build a list of rows. It's not a matrix, but a list > > of rows can be a *ragged* matrix with rows of varying length. > > > > On Wed, 28 Feb 2024 at 21:57, Steven Yen <st...@ntu.edu.tw> wrote: > > > > > > Is there as way to initialize a vector (matrix) with an unknown length > > > (dimension)? NULL does not seem to work. The lines below work with a > > > vector of length 4 and a matrix of 4 x 4. What if I do not know > > > initially the length/dimension of the vector/matrix? > > > > > > All I want is to add up (accumulate) the vector and matrix as I go > > > through the loop. > > > > > > Or, are there other ways to accumulate such vectors and matrices? > > > > > > > x<-rep(0,4) # this works but I like to leave the length open > > > > for (i in 1:3){ > > > + x1<-1:4 > > > + x<-x+x1 > > > + } > > > > x > > > [1] 3 6 9 12 > > > > > > > y = 0*matrix(1:16, nrow = 4, ncol = 4); # this works but I like to > > > leave the dimension open > > > [,1] [,2] [,3] [,4] > > > [1,] 0 0 0 0 > > > [2,] 0 0 0 0 > > > [3,] 0 0 0 0 > > > [4,] 0 0 0 0 > > > > for (i in 1:3){ > > > + y1<-matrix(17:32, nrow = 4, ncol = 4) > > > + y<-y+y1 > > > + } > > > > y > > > [,1] [,2] [,3] [,4] > > > [1,] 51 63 75 87 > > > [2,] 54 66 78 90 > > > [3,] 57 69 81 93 > > > [4,] 60 72 84 96 > > > > > > > > > > ______________________________________________ > > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > > https://stat/ > > > .ethz.ch%2Fmailman%2Flistinfo%2Fr-help&data=05%7C02%7Ctebert%40ufl.edu > > > %7Cdbccaccf29674b10b17308dc39114d38%7C0d4da0f84a314d76ace60a62331e1b84 > > > %7C0%7C0%7C638447993707432549%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw > > > MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata= > > > PtWjcDOnwO7PArVOSdgYbpz8ksjDPK%2Bn9ySyhwQC0gE%3D&reserved=0 > > > PLEASE do read the posting guide > > > http://www.r/ > > > -project.org%2Fposting-guide.html&data=05%7C02%7Ctebert%40ufl.edu%7Cdb > > > ccaccf29674b10b17308dc39114d38%7C0d4da0f84a314d76ace60a62331e1b84%7C0% > > > 7C0%7C638447993707438911%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiL > > > CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=Igb16 > > > CBYgG21HLEDH4I4gfjjFBa3KjDFK8yEZUmBo8s%3D&reserved=0 > > > and provide commented, minimal, self-contained, reproducible code. > > > > ______________________________________________ > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.