[R] how do I transform this to a for loop

Paul Hiemstra p.hiemstra at geo.uu.nl
Mon Sep 6 12:09:57 CEST 2010


Hi Karl,

The "why do it like this" is probably direct towards creating 9 new 
objects for the arima results (Is this right Bill?). A better option 
would be to create a list with nine entries. This is much easier for any 
subsequent analyses. An example that uses lapply (an efficient syntax 
for loops):

sseq <- c(1, seq(5, 40, by = 5))
result_list = lapply(sseq, function(num) {
     arima(data.ts[num:(num+200)], order=c(1,1,1))
})

cheers,
Paul

On 09/06/2010 10:46 AM, Karl Brand wrote:
> Hi Bill,
>
> I didn't make the original post, but its pretty similar to some thing 
> i would have queried the list about. But, as an R dilatante i find 
> more curious your question-
>
> "...but why would you want to do so?"
>
> Is this because you'd typically use the given nine lines of explicit 
> code to carve up a single dataset into nine symmetrical variants ? Or 
> that some contextual information may affect how you would write the 
> for() loop?
>
> As i lack the experience to know any better, i perceive your for() 
> loop as de rigour in efficient use of R, and the preferance of all 
> experienced R user's. But not having any formal education in R or role 
> models as such, its only an assumption (compeletely ignoring for the 
> moment processing efficiency/speed, rounding error and such).
>
> But which i now question! Explicit, simple crude looking code; or, 
> something which demands a little more proficiency with the language?
>
> cheers,
>
> Karl
>
>
>
> On 9/6/2010 6:16 AM, Bill.Venables at csiro.au wrote:
>>
>> sseq<- c(1, seq(5, 40, by = 5))
>> for(i in 1:length(sseq))
>> assign(paste("arima", i, sep=""), 
>> arima(data.ts[sseq[i]:(sseq[i]+200)], order=c(1,1,1)))
>>
>> ...but why would you want to do so?
>>
>>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org 
>> [mailto:r-help-bounces at r-project.org] On Behalf Of lord12
>> Sent: Monday, 6 September 2010 10:57 AM
>> To: r-help at r-project.org
>> Subject: [R] how do I transform this to a for loop
>>
>>
>> arima1<- arima(data.ts[1:201], order = c(1,1,1))
>> arima2<- arima(data.ts[5:205], order = c(1,1,1))
>> arima3<- arima(data.ts[10:210], order = c(1,1,1))
>> arima4<- arima(data.ts[15:215], order = c(1,1,1))
>> arima5<- arima(data.ts[20:220], order = c(1,1,1))
>> arima6<- arima(data.ts[25:225], order = c(1,1,1))
>> arima7<- arima(data.ts[30:230], order = c(1,1,1))
>> arima8<- arima(data.ts[35:235], order = c(1,1,1))
>> arima9<- arima(data.ts[40:240], order = c(1,1,1))
>>
>


-- 
Drs. Paul Hiemstra
Department of Physical Geography
Faculty of Geosciences
University of Utrecht
Heidelberglaan 2
P.O. Box 80.115
3508 TC Utrecht
Phone:  +3130 253 5773
http://intamap.geo.uu.nl/~paul
http://nl.linkedin.com/pub/paul-hiemstra/20/30b/770



More information about the R-help mailing list