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

Karl Brand k.brand at erasmusmc.nl
Tue Sep 7 10:58:15 CEST 2010


I think i've  got it:

for() is best employed for convenience only; and best NOT employed in 
computation for which many other approaches/functions are better suited 
(faster).

Many thanks for your comment,

Karl

On 9/7/2010 12:52 AM, Bill.Venables at csiro.au wrote:
> I have in mind the following quote from John Chambers
>
> Tradition among experienced S programmers has always been that loops (typically 'for'
> loops) are intrinsically inefficient: expressing computations without loops has provided
> a measure of entry into the inner circle of S programming.
>     -- John Chambers
>        Programming With Data, p. 173 (1998)
>
> If I had to do a series of computations like this I would actually use the loop to create the code and then run it as a batch job.  Loops can be very slow because of 'backout'.
>
> Try the following little script, which take about no time at all.
>
> ####
> comm<- quote(M<- arima(data.ts[START:FINISH], order = c(1,1,1)))
> subst<- function(Command, ...) do.call("substitute", list(Command, list(...)))
>
> sink("fitArmias.R")
> for(i in 1:100) {
> 	thisComm<- subst(comm,
> 		M = as.name(paste("arima", substring(1000+i, 2), sep = "")),
> 		START = 0+i, FINISH = 200+i)
> 	print(thisComm)
> }
> sink()
> ####
>
> and then look at the file fitArimas.R.  If you were to run this as a batch job - the way I would do things - it would work *much* faster than doing the same thing in a for() loop the way I suggested.
>
> Just a comment, of course.
>
> Bill Venables.
>
> -----Original Message-----
> From: Karl Brand [mailto:k.brand at erasmusmc.nl]
> Sent: Monday, 6 September 2010 6:46 PM
> To: Venables, Bill (CMIS, Cleveland)
> Cc: gaut222 at yahoo.com; r-help at r-project.org
> Subject: Re: [R] how do I transform this to a for loop
>
> 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))
>>
>

-- 
Karl Brand <k.brand at erasmusmc.nl>
Department of Genetics
Erasmus MC
Dr Molewaterplein 50
3015 GE Rotterdam
P +31 (0)10 704 3409 | F +31 (0)10 704 4743 | M +31 (0)642 777 268



More information about the R-help mailing list