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.venab...@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.br...@erasmusmc.nl]
Sent: Monday, 6 September 2010 6:46 PM
To: Venables, Bill (CMIS, Cleveland)
Cc: gaut...@yahoo.com; r-help@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.venab...@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-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
Behalf Of lord12
Sent: Monday, 6 September 2010 10:57 AM
To: r-help@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.br...@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

______________________________________________
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