Re: [R] unavoidable loop? a better way??

2004-11-13 Thread Prof Brian Ripley
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??

2004-11-12 Thread James Muller
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??

2004-11-12 Thread Murad Nayal

__
[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??

2004-11-12 Thread James Muller
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??]

2004-11-12 Thread Murad Nayal

__
[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??

2004-11-12 Thread Deepayan Sarkar
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??

2004-11-12 Thread James Muller
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