Re: [R] How to create a list that grows automatically

2007-03-09 Thread hadley wickham
> I would like to know if there is a way to create a list or an array (or
> anything) which grows automatically as more elements are put into it. What I
> want to find is something equivalent to an ArrayList object of Java
> language. In Java, I can do the following thing:
>
> // Java code
> ArrayList myArray = new ArrayList();
> myArray.add("object1");
> myArray.add("object2");
> 
> // End of java code

As others have mentioned, you can do this with lists in R.

However, there is an important difference between ArrayLists in Java
and Lists in R.  In Java, when an ArrayList grows past its bound, it
doesn't allocate just enough space, it allocates a lot more, so the
next time you allocate past the end of the array, there's space
already reserved.  This gives (IIRC) amortised O(n) behaviour.  R
doesn't do this however, so has to copy the entire array every time
giving O(n^2) behaviour.

Hadley

__
R-help@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.


Re: [R] How to create a list that grows automatically

2007-03-09 Thread bogdan romocea
This is a bad idea as it can greatly slow things down (the details
were discussed several times on this list). What you want to do is
define from the start the length of your vector/list, then grow it (by
a large margin) only if it becomes full.
lst <- vector(mode="list", length=10)  #assuming 100k nodes are enough
#populate the list, then remove the unused nodes if you care to
lst <- lst[sapply(lst, function(x) {!is.null(x)})]


> -Original Message-
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Young-Jin Lee
> Sent: Friday, March 09, 2007 11:08 AM
> To: r-help
> Subject: [R] How to create a list that grows automatically
>
> Dear R users
>
> I would like to know if there is a way to create a list or an
> array (or
> anything) which grows automatically as more elements are put
> into it. What I
> want to find is something equivalent to an ArrayList object of Java
> language. In Java, I can do the following thing:
>
> // Java code
> ArrayList myArray = new ArrayList();
> myArray.add("object1");
> myArray.add("object2");
> 
> // End of java code
>
> Thanks in advance.
>
> Young-Jin Lee
>
> [[alternative HTML version deleted]]
>
> __
> R-help@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.
>

__
R-help@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.


Re: [R] How to create a list that grows automatically

2007-03-09 Thread Alberto Monteiro
Young-Jin Lee asked:
> 
> I would like to know if there is a way to create a list or an array (or
> anything) which grows automatically as more elements are put into 
> it. 
>
???

I think this is the default behaviour of R arrays:

x <- vector(length=0)  # create a vector of zero length
x[1] <- 2
x[10] <- 3
x[length(x) + 1] <- 4
x # 2 NA NA ... 3 4


> What I want to find is something equivalent to an ArrayList 
> object of Java language. In Java, I can do the following thing:
> 
> // Java code
> ArrayList myArray = new ArrayList();
> myArray.add("object1");
> myArray.add("object2");
> 
> // End of java code
> 
myArray <- vector(length=0)
myArray <- c(myArray, "object1")
myArray <- c(myArray, "object2")
myArray # array with 2 strings

Alberto Monteiro

__
R-help@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.