update() can not find objects (PR#1861)
Peter Dalgaard BSA
p.dalgaard@biostat.ku.dk
01 Aug 2002 19:26:34 +0200
yzhou@arcturusag.com writes:
> Full_Name: Yi-Xiong Zhou
> Version: 1.5.1
> OS: win2000pro
> Submission from: (NULL) (64.169.249.42)
>
>
> Update() can not find objects when it is used in a function, which is in turn
> being called by another function. Here is a R script to show the problem:
>
> ######## begin of the test script ##########
> fun1 <- function() {
> x <- matrix(rnorm(500), 20,25)
> y <- rnorm(20)
> oo <- lm(y~x)
> print("step 1")
> update(oo)
> print("first update success.")
> fun2(oo)
> }
>
> fun2 <- function(gg) {
> update(gg)
> print("second update success.")
> }
>
> fun1()
> ########### end of the test script #############
>
> Here is the result of running this script:
>
> [1] "step 1"
> [1] "first update success."
> Error in eval(expr, envir, enclos) : Object "y" not found
>
> Ideally, update should first search the objects in its environment first, then
> its parent's, and grand parent's environments ... Right now, it only searchs its
> own environment and the global environment, skipping its parents'.
No, that's not what you should expect in a language with lexical scoping.
However, there might still be a bug, since update with a non-missing
formula argument would extract the formula environment from the
formula stored in the lm object, but that doesn't happen if it is
missing. Modifying fun2 to
function(gg) {
update(gg,formula(gg))
print("second update success.")
}
or even
function(gg) {
update(gg,y~x)
print("second update success.")
}
does allow your example to run, which is somewhat unexpected...
--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel 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-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._