What's the best way to simulate Recall for parent function? Consider this one-time recursive code: alwaysEven <- function(x) { handleOdd <- function(x) { alwaysEven(x-1) # use Recall-like here } return(if (x %% 2) handleOdd(x) else x) } any2even <- alwaysEven rm(alwaysEven) any2even(3) ---------------------------------------------------------- SIGSIG -- signature too long (core dumped)
Here are two ways: # method 1. nest an extra alwaysEven alwaysEven <- function(x) { alwaysEven <- function(x) { handleOdd <- function(x) { alwaysEven(x-1) # use Recall-like here } return(if (x %% 2) handleOdd(x) else x) } alwaysEven(x) } any2even <- alwaysEven rm(alwaysEven) any2even(3) # method 2. sys.function alwaysEven <- function(x) { handleOdd <- function(x) { sys.function(1)(x-1) # use Recall-like here } return(if (x %% 2) handleOdd(x) else x) } any2even <- alwaysEven rm(alwaysEven) any2even(3) On 3/29/06, Paul Roebuck <roebuck at mdanderson.org> wrote:> What's the best way to simulate Recall for parent function? > Consider this one-time recursive code: > > alwaysEven <- function(x) { > handleOdd <- function(x) { > alwaysEven(x-1) # use Recall-like here > } > > return(if (x %% 2) handleOdd(x) else x) > } > any2even <- alwaysEven > rm(alwaysEven) > any2even(3) > > ---------------------------------------------------------- > SIGSIG -- signature too long (core dumped) > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
On Wed, 29 Mar 2006, Paul Roebuck wrote:> What's the best way to simulate Recall for parent function? > Consider this one-time recursive code: > > alwaysEven <- function(x) { > handleOdd <- function(x) { > alwaysEven(x-1) # use Recall-like here > } > > return(if (x %% 2) handleOdd(x) else x) > } > any2even <- alwaysEven > rm(alwaysEven) > any2even(3)You can make anonymous recursive functions with local() whatever <- local({ alwaysEven <- function(x) { handleOdd <- function(x) { alwaysEven(x-1) } return(if (x %% 2) handleOdd(x) else x) } alwaysEven }) -thomas Thomas Lumley Assoc. Professor, Biostatistics tlumley at u.washington.edu University of Washington, Seattle