Re: [R] functions of functions

From: Uwe Ligges <ligges_at_statistik.uni-dortmund.de>
Date: Mon 09 May 2005 - 18:13:19 EST

Robin Hankin wrote:

> Hello Uwe
>
> thanks for this. Unfortunately it doesn't quite do what I want:
>
>
> R> x <- c(0.3,0.3,0.5)
> R> f(c("sin","cos"),1:2,x)
>
>
> 1] 1.266795
> Warning messages:
> 1: longer object length
> is not a multiple of shorter object length in: x + int
> 2: number of rows of result
> is not a multiple of vector length (arg 1) in: cbind(foo, x + int)
> R>
>
> [
>
>
> I need
>
> R> sin(x+1) + cos(x+2)
> [1] 0.2972822 0.2972822 0.1963514
>
> ]

I see, now the problem is much clearer, so what about:

f <- function(foo, int, x){

     lf <- length(foo)
     li <- length(int)
     l <- max(lf, li)
     if(l > lf) foo <- rep(foo, length = l)
     else if(l > li) int <- rep(int, length = l)
     values <- mapply(function(foo, int)
         do.call(foo, list(x+int)), foo, int)
     return(rowSums(values))

}

Uwe

>
> best wishes
>
> Robin
>
>
>
> On May 9, 2005, at 08:34 am, Uwe Ligges wrote:
>

>> Robin Hankin wrote:
>>
>>> Hi
>>> I have an application where my difficulty boils down to not
>>> being able to define a function f() with the following properties:
>>> f("sin",0:2,x)               #returns sin(x+0) + sin(x+1) + sin(x+2)
>>> f(c("sin","cos"), 1:2,x)     #returns sin(x+1) + cos(x+2)
>>> f(c("sin","cos","exp"),3,x)  #returns sin(x+3) + cos(x+3) + exp(x+3)
>>> anyone?
>>
>>
>> Not really nice, but hopefully works:
>>
>> f <- function(foo, int, x){
>>   # too lazy to think myself about recycling:
>>   X <- cbind(foo, x + int)
>>   # mapply-ing over both columns
>>   values <- mapply(function(foo, x) do.call(foo, list(x)),
>>        X[,1], as.integer(X[,2]))
>>   # caculating the sum:
>>   return(sum(values))
>> }
>>
>>
>> Uwe
>>
>>
>>
>>
>>

> --
> Robin Hankin
> Uncertainty Analyst
> National Oceanography Centre, Southampton
> European Way, Southampton SO14 3ZH, UK
> tel 023-8059-7743


R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon May 09 18:16:12 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:40 EST