Re: [R] unavoidable loop? a better way??
Ah, that is now a recursive linear filter. In fact filter() would do both your examples. On Sat, 13 Nov 2004, James Muller wrote: Take 3: # p is a vector myfunc - function (p) { x - rep(0,length(p)) x[1] - p[1] for (i in c(2:length(p))) { x[i] - 0.8*p[i] + 0.2*x[i-1] # note the x in the last term } return (x) } James On Sat, 13 Nov 2004 01:12:50 -0600, Deepayan Sarkar [EMAIL PROTECTED] wrote: 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 __ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UKFax: +44 1865 272595 __ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
[R] unavoidable loop? a better way??
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) } 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 __ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Re: [R] unavoidable loop? a better way??
__ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Re: [R] unavoidable loop? a better way??
I am very sorry. I've made a typo. The function should be: # 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*x[i-1] } return (x) } James __ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
[Fwd: Re: [R] unavoidable loop? a better way??]
__ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Re: [R] unavoidable loop? a better way??
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 __ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Re: [R] unavoidable loop? a better way??
Take 3: # p is a vector myfunc - function (p) { x - rep(0,length(p)) x[1] - p[1] for (i in c(2:length(p))) { x[i] - 0.8*p[i] + 0.2*x[i-1] # note the x in the last term } return (x) } James On Sat, 13 Nov 2004 01:12:50 -0600, Deepayan Sarkar [EMAIL PROTECTED] wrote: 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 __ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html