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.