[R] Nesting Functions
Duncan Murdoch
murdoch at stats.uwo.ca
Sat Jan 28 04:29:43 CET 2006
On 1/27/2006 9:07 PM, Manuel Morales wrote:
> On Thu, 2006-01-26 at 21:55 -0500, Duncan Murdoch wrote:
>> On 1/26/2006 9:45 PM, Manuel Morales wrote:
>>> Dear list members,
>>>
>>> I'm looking for a way to write "nested" functions similar to the
>>> function "Nest" or "NestList" in Mathematica.
>>>
>>> E.g.,
>>>
>>> f<-function(x) x+2*x
>>>
>>> f(f(f(2)))
>>>
>>> might instead be written as nest(f, 2, 3)
>>>
>>> read as, nest function f 3 times with 2 as the initial value.
>> It's easy enough using a for loop:
>>
>> nest <- function(f, initial, reps) {
>> result <- initial
>> for (i in seq(len=reps)) result <- f(result)
>> result
>> }
>>
>> Duncan Murdoch
> That works, thanks! But what if I want to apply the function to a set of
> vectors.
>
> init.values<-c(3,10,20)
> rep.values<-c(0,1,2)
>
> nest(f,init.values,rep.values) fails because only the first value is
> used in a for loop. The following works, but it's clunky and doesn't
> scale with variation in the number of reps.
>
> nest.vectorize<-function(f, initial, reps)
> ifelse(reps==0,initial,
> ifelse(reps==1,f(initial),f(f(initial))))
>
> nest.vectorize(f,init.values,rep.values)
>
> Any suggestions?
Something like this would work:
nest <- function(f, initial, reps) {
result <- initial
for (i in seq(len=max(reps))) result <- ifelse(i <= reps,
f(result), result)
result
}
More information about the R-help
mailing list