On 04/05/2016 7:11 AM, Naresh Gurbuxani wrote:
I am trying to write a function, which can be made very general if one of the
inputs can be an expression. How can this be done?
For example, to find root of a function, I would like to say
my.func <- function(x) {x^3 + 2 * (x^2) - 7}
x.left <- 0
x.right <- 2
n.iterations <- 0
find.root <- function(my.func, x.left, x.right) {
# code here
return(c(x.mid, n.iterations))
}
The above method clearly does not work.
You are taking the right approach. You can pass functions as arguments
to other functions; they are "first class objects". For example:
evaluate <- function(f, x) f(x)
evaluate(my.func, 3)
would give the same result as my.func(3).
For your find.root function, just write the search in find.root using
the name of the argument (which for didactic purposes I'd recommend be
different from the actual function name, but it'll be fine in practice).
It is also possible to pass expressions that aren't in functions, but it
gets tricky, and you shouldn't do that in your first attempt.
Duncan Murdoch
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.