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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Folding ?
2 messages · Yves Gauvreau, Saikat DebRoy
"Yves" == Yves Gauvreau <cyg at sympatico.ca> writes:
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.
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 -
fold.fun(1:2, exp)
1 * x * (exp)(2 * x)
fold.fun(1:2, exp, y)
1 * y * (exp)(2 * y) Hope this helps. Saikat
Department of Statistics Email: saikat at stat.wisc.edu University of Wisconsin - Madison Phone: (608) 263 5948 1210 West Dayton Street Fax: (608) 262 0032 Madison, WI 53706-1685 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- 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 _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._