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.

Reply via email to