Santosh -
The simple answer to your question is to initialize NewObject to NULL before the loop, i.e.

   newObject = NULL

However, I should point out this is one of the most inefficient ways to program in R. A far better way is
to allocate enough space for NewObject outside your
loop, and "fill it in" in the loop.  Here's a simple
example to give you an idea of the difference in time
the two methods require:

system.time({answer = matrix(NA,1000,5);
+              for(i in 1:1000)answer[i,] <- sample(10,5)})
   user  system elapsed
0.020 0.000 0.017
system.time({answer=NULL;
+              for(i in 1:1000)answer=rbind(answer,sample(10,5))})
   user  system elapsed
  0.072   0.000   0.070

However, it gets even worse if the sample size is larger:

system.time({answer = matrix(NA,10000,5);
+              for(i in 1:10000)answer[i,] <- sample(10,5)})
   user  system elapsed
0.184 0.000 0.184
system.time({answer=NULL;for(i in 1:10000)
+              answer=rbind(answer,sample(10,5))})
   user  system elapsed
  5.492   0.032   5.562

Even if you don't know how big your newObject matrix will
become, it's still far more efficient to overallocate the matrix and then truncate it at the end.

I'd strongly recommend that you avoid building your matrix
incrementally inside a loop!

                                        - Phil Spector
                                         Statistical Computing Facility
                                         Department of Statistics
                                         UC Berkeley
                                         spec...@stat.berkeley.edu


On Mon, 22 Nov 2010, Santosh Srinivas wrote:

Hello,

I am trying to recursively append some data from multiple files into a
common object

For this, I am using in a loop

NewObject <- rbind(NewObject,tempObject)


For the first loop, obviously there is no NewObject ... so I wanted to do
NewObject <- tempObject[0,]

Now when it loops again I want to put the statement do "NewObject <-
tempObject[0,]" inside a if statement ... so that it does I can skip it once
NewObject has been initialized.

But, is.object doesn't seem to work.

What is the alternative check that I can do? And is there a better way to
achieve what I want?

Thanks,
S

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


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

Reply via email to