Simon, There are a couple of subtle issues here. As I wrote, PrintValue evaluates in the base environment, so sees only base functions. It is not clear to me that is the right place (why the base environment and not the base namespace, for example), and one might consider evaluating in R_GlobalEnv.
However, as I understand it, one can load the methods namespace and turn S4 dispatch on without attaching the package. So it seems entirely possible (but unusual) to have a package import 'methods' and then create S4 objects, and expect autoprinting to work. That's why PrintValueEnv has to get show() from the methods namespace (at least as a last resort). Now, there is an issue as to what autoprinting should do if a user defines his own version of print or show higher up the search path. At present I believe the users's version is used for autoprinting, so we might want to preserve those semantics. There are also issues with the visibility of S3 print methods, and possible discrepancies in the choice between methods on the search path and registered ones. I need to think through what the best fix is (suggestions welcome), and get this into 2.5.0 as a bug fix (I won't have time until Tuesday at the earliest). Brian On Sun, 8 Apr 2007, Simon Urbanek wrote: > Deepayan, > > you fail to load the methods package, so you cannot use S4. Eval > "library(methods)" first then everything is fine. > > Cheers, > Simon > > On Apr 7, 2007, at 7:33 PM, Deepayan Sarkar wrote: > >> Hi, >> >> I think this is a bug (even though I can't find documentation >> explicitly saying that it should work). Basically, Rf_PrintValue(obj) >> fails when 'obj' is an S4 object that should be printed using show() >> rather than print(). From the error message I'm guessing that the need >> to use show is detected correctly but then show is not found. >> >> "cbind2" in the code below is just a representative object, the same >> holds for the few other S4 objects I have tried. >> >> The following uses r-devel on i686-pc-linux-gnu, but the results are >> same with R 2.4.1 (with suitable changes to the R_ParseVector call). >> On powerpc Linux I get a segfault. >> >> >> $ RPROG=R-devel >> $ ${RPROG} --version | head -1 >> R version 2.6.0 Under development (unstable) (2007-04-06 r41080) >> $ export LD_LIBRARY_PATH=`${RPROG} RHOME`/lib >> $ cat parseEvalS4.c >> >> #include <Rinternals.h> >> #include <Rembedded.h> >> #include <R_ext/Parse.h> >> >> int main(int argc, char *argv[]) >> { >> SEXP e, val; >> int i, errorOccurred; >> ParseStatus status; >> char *cmds[] = { "show(5)", "show(cbind2)", "cbind2" }; >> >> argv[0] = "R"; >> Rf_initEmbeddedR(argc, argv); >> >> for (i = 0; i < 3; i++) { >> printf("** I **: Executing command: %s\n", cmds[i]); >> PROTECT(e = R_ParseVector(mkString(cmds[i]), -1, &status, >> R_NilValue)); >> val = eval(VECTOR_ELT(e, 0), R_GlobalEnv); >> printf("** I **: Evaluation succeeded, now printing using >> Rf_PrintValue:\n"); >> Rf_PrintValue(val); >> UNPROTECT(1); >> } >> >> Rf_endEmbeddedR(0); >> return 0; >> } >> >> $ >> $ gcc -o parseEvalS4 \ >>> `${RPROG} CMD config --cppflags` \ >>> `${RPROG} CMD config --ldflags` parseEvalS4.c >> $ >> $ ${RPROG} CMD ./parseEvalS4 --vanilla --silent >> ** I **: Executing command: show(5) >> [1] 5 >> ** I **: Evaluation succeeded, now printing using Rf_PrintValue: >> [1] 5 >> ** I **: Executing command: show(cbind2) >> standardGeneric for "cbind2" defined from package "methods" >> >> function (x, y) >> standardGeneric("cbind2") >> <environment: 0x8b34ef8> >> Methods may be defined for arguments: x, y >> >> ** I **: Evaluation succeeded, now printing using Rf_PrintValue: >> NULL >> ** I **: Executing command: cbind2 >> ** I **: Evaluation succeeded, now printing using Rf_PrintValue: >> Error: could not find function "show" >> Error: unprotect(): only 0 protected items >> $ >> >> -Deepayan >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > -- Brian D. Ripley, [EMAIL PROTECTED] 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-devel