From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>

Date: Wed 05 Apr 2006 - 11:26:50 GMT

Date: Wed 05 Apr 2006 - 11:26:50 GMT

On Wed, 5 Apr 2006, Henrik Bengtsson wrote:

*> Hi,
**>
*

> forget about the below details. It is not related to the fact that

*> the function is returned from a function. Sorry about that. I've
**> been troubleshooting soo much I've been shoting over the target. Here
**> is a much smaller reproducible example:
**>
**> x <- 1:10
**> y <- 1:10 + rnorm(length(x))
**> sp <- smooth.spline(x=x, y=y)
**> ypred <- predict(sp$fit, x)
**> # [1] 2.325181 2.756166 ...
**> ypred2 <- predict(sp$fit, c(0,x))
**> # Error in Recall(object, xrange) : couldn't find
**> # function "predict.smooth.spline.fit"
*

As for

>> PS, may I suggest to modify page() so that

*>> 'page(getAnywhere("predict.smooth.spline.fit"))' works? DS.
*

page <- function(x, method = c("dput", "print"), ...) {

subx <- substitute(x) have_object <- FALSE if(is.call(subx)) { object <- x have_object <- TRUE subx <- deparse(subx) } else { if(is.character(x)) subx <- x else if(is.name(subx)) subx <- deparse(subx) if (!is.character(subx) || length(subx) != 1) stop("'page' requires a name, call or character string") parent <- parent.frame() if(exists(subx, envir = parent, inherits=TRUE)) { object <- get(subx, envir = parent, inherits=TRUE) have_object <- TRUE } } if(have_object) { method <- match.arg(method) file <- tempfile("Rpage.") if(method == "dput") dput(object, file) else { sink(file) print(object) sink() } file.show(file, title = subx, delete.file = TRUE, ...) } else stop(gettextf("no object named '%s' to show", subx), domain = NA)}

which also allows 1-element character vectors (and I am not entirely sure we want that).

*>
*

> /Henrik

*>
**>
**> On 4/5/06, Henrik Bengtsson <hb@maths.lth.se> wrote:
**>> Hi,
**>>
**>> yesterday I got very useful feedback on what is the best way to return
**>> a function from a function.
**>>
**>> Now, I run into a problem calling a returned function that down the
**>> stream uses Recall(). Below is a self-contained example. I took away
**>> yesterday's code for returning a minimal environment for the function,
**>> because that is not related to this problem.
**>>
**>> getPredictor <- function(x, y) {
**>> sp <- smooth.spline(x=x, y=y, keep.data=FALSE)
**>> function(x, ...) predict(sp$fit, x, ...)$y
**>> }
**>>
**>> # Simulate data
**>> x <- 1:10
**>> y <- 1:10 + rnorm(length(x))
**>>
**>> # Estimate predictor function
**>> fcn <- getPredictor(x,y)
**>>
**>> # No extrapolation => no Recall()
**>> ypred <- fcn(x)
**>> print(ypred)
**>> # Gives: # [1] 2.325181 2.756166 ...
**>>
**>> # With extrapolation => Recall()
**>> xextrap <- c(0,x)
**>> ypred <- fcn(xextrap)
**>> # Gives: # Error in Recall(object, xrange) : couldn't find
**>> # function "predict.smooth.spline.fit"
**>>
**>> To see what's the function looks like, do
**>>
**>> pfcn <- getAnywhere("predict.smooth.spline.fit")$obj[[2]]
**>> page(pfcn)
**>>
**>> A workaround is to set the predict.smooth.spline.fit() in .GlobalEnv, i.e.
**>>
**>> predict.smooth.spline.fit <- pfcn
**>>
**>> Does Recall() have a problem because predict.smooth.spline.fit() is
**>> not exported, or what is going on? Are there alternatives to the
**>> above workaround? I can see how such a workaround can become very
**>> complicated with complex functions where it is hard to predict what
**>> functions are called when.
**>>
**>> /Henrik
**>>
**>> PS, may I suggest to modify page() so that
**>> 'page(getAnywhere("predict.smooth.spline.fit"))' works? DS.
**>>
**>
**>
**> --
**> Henrik Bengtsson
**> Mobile: +46 708 909208 (+2h UTC)
**>
**> ______________________________________________
**> R-devel@r-project.org mailing list
**> **https://stat.ethz.ch/mailman/listinfo/r-devel
**>
**>
*

-- Brian D. Ripley, ripley@stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-develReceived on Wed Apr 05 21:52:29 2006

*
This archive was generated by hypermail 2.1.8
: Wed 05 Apr 2006 - 14:17:00 GMT
*