[R] functions of functions

Robin Hankin r.hankin at noc.soton.ac.uk
Mon May 9 09:54:38 CEST 2005


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

]


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




More information about the R-help mailing list