[R] unavoidable loop? a better way??

Deepayan Sarkar deepayan at stat.wisc.edu
Sat Nov 13 08:12:50 CET 2004


On Saturday 13 November 2004 00:51, James Muller wrote:
> Hi all, I have the following problem, best expressed by my present
> solution:
>
> # p is a vector
> myfunc <- function (p) {
>    x[1] <- p[1]
>    for (i in c(2:length(p))) {
>      x[i] <- 0.8*p[i] + 0.2*p[i-1]
>    }
>    return (x)
> }

Does this work at all? I get

> myfunc <- function (p) {
+    x[1] <- p[1]
+    for (i in c(2:length(p))) {
+      x[i] <- 0.8*p[i] + 0.2*p[i-1]
+    }
+    return (x)
+ }
>
> myfunc(1:10)
Error in myfunc(1:10) : Object "x" not found


Anyway, simple loops are almost always avoidable. e.g.,

myfunc <- function (p) {
   x <- p
   x[-1] <- 0.8 * p[-1] + 0.2 * p[-length(p)]
   x
}

Deepayan

>
> That is, I'm calculating a time-weighted average. Unfortunately the
> scale of the problem is big. length(p) in this case is such that each
> call takes about 6 seconds, and I have to call it about 2000 times
> (~3 hours). And, I'd like to do this each day. Thus, a more efficient
> method is desirable.
>
> Of course, this could be done faster by writing it in c, but I want
> to avoid doing that if there already exists something internal to do
> the operation quickly (because I've never programmed c for use in R).
>
> Can anybody offer a solution?
>
> I apologise if this is a naive question.
>
> James




More information about the R-help mailing list