6

I want to know how to store the values of the complete loop output into a single dataframe in R. For example,

for(i in unique(x$id)){
    .
    .
    .
    y=output of one iteration}

At the end of each iteration, I am getting the output in y. But I want to store output of all iterations into y. How do I do that in R?

1
  • 5
    You should seriously consider using lapply. It's designed for this. Commented Aug 6, 2015 at 18:18

2 Answers 2

24

You can do this simply by

y  <- NULL;
for (i in unique(x$id))
 { 
  tmp <- [output of one iteration]
  y <- rbind(y, tmp)
 }
Sign up to request clarification or add additional context in comments.

3 Comments

Don't grow an object in a loop. It's slow. Pre-allocate to the size you need!
How do you mean? Could you please show what needs to be fixed here in order for the code to run faster? @Roland
6

You can begin with y as an empty data.frame as in: y <- data.frame(). Then bind the rows to this data.frame at the end of each iteration as in: y <- rbind.data.frame(y, [output of one interation]). But you can also make this a little more tight by wrapping it in an lapply and do.call as in:

y <- do.call(rbind.data.frame,
             lapply(unique(x$id),
                    function(i){
       ...;
       return([output of one iteration])}))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.