[R] Appending results via for loop

jim holtman jholtman at gmail.com
Fri Feb 5 18:15:40 CET 2010


The element that you store in the list can be anything.  If you have a
matrix, or dataframe or anything else, it handles it just fine.  Also
each of the elements can have different dimensions.  A list in this
instance is probably more efficient than a dataframe that you would be
adding to.  Also if you are only collecting the same size vector in
the list, then at the end you can do something like:

do.call(rbind, result)

to create a matrix or dataframe from it.  Accessing a dataframe,
especially dynamically growing it, will impact (poorly) the
performance of your script.  It is alway interesting to run Rprof and
look at the amount of time that may be spent accessing things in a
dataframe.  If you have a dataframe of mainly numeric data, you will
see an improvement in the performance if you convert the dataframe to
a matrix in the portion of your script where you are making heavy
references to the data.

On Fri, Feb 5, 2010 at 12:03 PM, Turchin, Michael
<Michael.Turchin at childrens.harvard.edu> wrote:
> Thanks Jim. If I want to store multiple columns of data in my list, how would I do that? result[j][[i]] where j could be 1, 2 or 3? And out of curiosity, why would I use a list over a dataframe in the instance were I only collecting one column of data? Is list more efficient than a dataframe at doing this?
>
> Thanks,
> ~Michael
> ________________________________________
> From: jim holtman [jholtman at gmail.com]
> Sent: Friday, February 05, 2010 12:02 PM
> To: Turchin, Michael
> Cc: r-help at r-project.org
> Subject: Re: [R] Appending results via for loop
>
> use a list:
>
> result <- list()
>
> for (i in 1:limit){
>    ....computation....
>    # store results
>    result[[i]] <- yourData
> }
>
> On Fri, Feb 5, 2010 at 11:14 AM, Turchin, Michael
> <Michael.Turchin at childrens.harvard.edu> wrote:
>> Hey all,
>>
>> So I'm manually conducting a sliding window test, and I would like to tack on results to some variable as the results are outputted. I'm using a for loop, and I am currently using an array as my 'output collector' variable, though I know I should be using a dataframe of some sort. My question is how to properly initialize a dataframe, and then add results to it as I go through my for loop. Do I need to assign the size of the dataframe beforehand, or can it be dynamic? I've read the help files and the mailing lists, but I think I am not wording my question properly to find the right answers, so I'm opting for this instead : )
>>
>> Here's my code:
>>
>> window <- 50
>> size <- 0
>> if (length(counts2$Count)<length(counts1$Count)) { size <-length(counts2$Count) } else { size <- length(counts1$Count) }
>> a <- 0
>> b <- 0
>> alpha <- .05
>> n <- window
>> pval <- qchisq((1-(alpha / n)), 1)
>> results <- c(seq(1,size,window))
>> loop <- 1
>> for (i in seq(1,size,window)) {
>>
>>        a <- i
>>        b <- i + window - 1
>>        countsavg <- (sum(abs(counts2$Count[a:b] - counts1$Count[a:b])))/length(a:b)
>>        countschisq <- ((abs(((counts2$Count[a:b] - counts1$Count[a:b])-countsavg))^2)/countsavg)
>>        results[loop] <- countschisq
>>        loop <<- loop + 1
>>
>> }
>>
>> I'm guessing I'll be getting rid of the loop variable and the 'per index' assignment thing, but I'm not sure what to do. Also, I'd like to actually be grabbing 3 different groups of value per window, rather than just one. So ultimately I'd like to have 3 columns in my data frame, and add to each column every time I go through the data frame.
>>
>> Thanks for your help everyone, really appreciate it,
>> ~Michael
>> ______________________________________________
>> R-help at 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.
>>
>
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem that you are trying to solve?
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?



More information about the R-help mailing list