On Tue, 4 Jan 2005, Daniel Almirall wrote:
I am curious. How are these suggestions different (better, worse?) from
x <- NULL for (i in 1:5) x <- c(x, i)
One imporant difference is between solutions that preallocate storage and those that don't.
x<-numeric(5)
for(i in 1:5) x[i]<-i
allocates one vector of length 5 and then modifies it, but
x<-NULL
for(i in 1:5) x<-c(x,i)
allocates vectors of length 1, 2, 3, 4, 5 in turn.
You can't tell this from anything in the language definition, since conceptually x[i]<-i also copies: it does
x <- "[<-"(x,i,i)
and for more complicated replacement functions it will really copy. Even if the first version really copied there would be some potential for having more efficient memory allocation with all the objects being of size 5 (at least, for very large values of 5).
If you don't know how long the vector needs to be then you can't preallocate, but a common programming strategy in other languages is to allocate powers of 2 (eg start out with x<-numeric(4) and if that isn't big enough do something like x<-c(x,numeric(4)) to double the size). I don't know if anyone has looked at whether this is ever useful in R.
-thomas
Thanks, Danny
On Tue, 4 Jan 2005, John Fox wrote:
Dear Dan,
The following also works:
x <- numeric(0) for (i in 1:5) x[i] <- i x[1] 1 2 3 4 5
It's worth noting, however, that extending a vector in this manner can be very inefficient for large vectors, since the vector is recopied each time. If you can anticipate the number of elements (or place an upper bound on it), then it's better to do something like
x <- numeric(5) for (i in 1:5) x[i] <- i
I hope this helps, John
-------------------------------- John Fox Department of Sociology McMaster University Hamilton, Ontario Canada L8S 4M4 905-525-9140x23604 http://socserv.mcmaster.ca/jfox --------------------------------
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Liaw, Andy Sent: Tuesday, January 04, 2005 8:51 AM To: 'Dan Bolser'; R mailing list Subject: RE: [R] Adding values to the end of a vector?
Is this what you're looking for?
x <- numeric(0) for (i in 1:5) x <- append(x, i) x[1] 1 2 3 4 5
Andy
From: Dan Bolser
I want to add values onto the end of a vector, for example...
x <- vector
for (i in 1:5){ add_to_end_of_vector(i,x) }
I just cant find the answer to this question!
Sorry for such a basic question, I tried...
x <- c()
for (i in 1:5) x[length(x)] <- i
but it didn't work.
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Thomas Lumley Assoc. Professor, Biostatistics [EMAIL PROTECTED] University of Washington, Seattle
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
