Skip to content

Folding ?

2 messages · Yves Gauvreau, Saikat DebRoy

#
Hi,

I need to write a function that would look something like this:

 S <- function(b=betas){
     expression(b[1] * f(b[2] * x * f(b[3] * x * f(...b[n-1] * x * f(b[n] *
x)))...)
}

Where n is the number of element in b.

Further I need to be able to evaluate S at some x numerically of course and
I need to use "deriv" and produce dS/dx such that I can evaluate it also at
some x.

I tried building the S expression manually to test the deriv (D) function,
evaluate them both and everything work's fine.

My trouble is automating the building of the expression S that is dependent
on the length of b.

Any suggestion are welcome.

Thanks in advance.

Yves Gauvreau

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
Try the following.

fold.fun <-
    function(b, f, name.var = x)
{
    if (length(b) == 0)
        return(1)
    name.var <- substitute(name.var)
    if (is.character(name.var))
        name.var <- as.name(name.var)
    fun <- quote((f))
    fun[[2]] <- substitute(f)
    ans <- quote(u*y)
    ans[[2]] <- b[length(b)]
    ans[[3]] <- namevec
    for (i in seq(length = length(b)-1)) {
        ans1 <- quote(u * y * f(v))
        ans1[[2]][[2]] <- b[i]
        ans1[[2]][[3]] <- name.var
        ans1[[3]][[1]] <- fun
        ans1[[3]][[2]] <- ans
        ans <- ans1
    }
    ans
}

You use it as in -
1 * x * (exp)(2 * x)
1 * y * (exp)(2 * y)

Hope this helps.

Saikat