maechler@stat.math.ethz.ch
1999-Sep-02 10:23 UTC
R 0.65.x bug : attach()/eval() {was "lib.source() within library()"} (PR#264)
In 0.65.0 lib.source() within library() works differently and fails to correctly "load" a library when it wants to change an object that it has defined previously: Below is a very short shar file that produces a "minimal" example [no attachment, just appended]. To reproduce {read on, before doing it!} do sh < libBug.shar <<<<< the file name you gave R INSTALL libBug echo 'library(libBug)' | R --vanilla --quiet which gives Error: attempt to set an attribute on NULL Execution halted ---- The only R code in the whole library is in libBug/R/only.R bla <- pi names(bla) <- "N" However, with help of debug(library) and *inside* library debug(lib.source) I can now reproduce the problem without needing library() directly: env <- attach(NULL, name = "libBug") exprs <- expression(bla <- pi, names(bla) <- "N") for (i in exprs) yy <- eval(i, env) ##-> Error: attempt to set an attribute on NULL and replacing the last line by for (i in exprs){ yy <- eval(i,env);print(ls(env=env)) cat("bla:",get("bla",env=env),"\n") } gives [1] "*tmp*" "bla" bla: 3.14159265358979 Error: attempt to set an attribute on NULL ----- #!/bin/sh # This is a shell archive (produced by GNU sharutils 4.2). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 1999-09-02 12:00 MET DST by <maechler@sophie>. # Source directory was `/users/u1/staff/maechler/R'. # # Existing files will *not* be overwritten unless `-c' is specified. # This format requires very little intelligence at unshar time. # "if test", "echo", "mkdir", and "sed" may be needed. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 28 -rw-r--r-- libBug/R/only.R # 47 -rw-r--r-- libBug/TITLE # echo=echo if mkdir _sh21127; then $echo 'x -' 'creating lock directory' else $echo 'failed to create lock directory' exit 1 fi # ============= libBug/R/only.R =============if test ! -d 'libBug'; then $echo 'x -' 'creating directory' 'libBug' mkdir 'libBug' fi if test ! -d 'libBug/R'; then $echo 'x -' 'creating directory' 'libBug/R' mkdir 'libBug/R' fi if test -f 'libBug/R/only.R' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'libBug/R/only.R' '(file already exists)' else $echo 'x -' extracting 'libBug/R/only.R' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'libBug/R/only.R' && Xbla <- pi Xnames(bla) <- "N" SHAR_EOF : || $echo 'restore of' 'libBug/R/only.R' 'failed' fi # ============= libBug/TITLE =============if test -f 'libBug/TITLE' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'libBug/TITLE' '(file already exists)' else $echo 'x -' extracting 'libBug/TITLE' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'libBug/TITLE' && XlibBug Simple Package to show lib.source() bug SHAR_EOF : || $echo 'restore of' 'libBug/TITLE' 'failed' fi rm -fr _sh21127 exit 0 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- 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 _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._