> I think we should get rid of source attributes completely, > since they are no longer needed, but your comment still > applies to source references. We should strip them when code > gets modified. > > Duncan Murdoch
I would be very concerned about losing source attributes-- it would break a lot of my code :(! It's very useful to have a single portable R object that contains the whole of a function, including its printable representation with full comments and formatted in whatever style the author prefers (and indeed the documentation, in the way I work); I use .Rdata files to swap multiple functions & data with colleagues all the time. Source references-to-files entail having to keep track of separate files, so are much less portable. I haven't had time to follow Duncan's recent changes on source references, but would it also be possible to use the new attribute-attaching-indexing mechanism to point to places in the 'source' attribute rather than in a file? That might offer the best of both worlds to dinosaurs like me who rely on source attributes... Mark Bravington CSIRO Mathematical & Information Sciences Marine Laboratory Castray Esplanade Hobart 7001 TAS ph (+61) 3 6232 5118 fax (+61) 3 6232 5012 mob (+61) 438 315 623 > > > > >> Perhaps the compromise has to be to warn people that > keep.source=TRUE > >> can be dangerous in this way, both in the help informaton for > >> options() and for substitute(). > >> > >> ? > >> > >> Bill Venables. > >> > >> -----Original Message----- > >> From: Peter Dalgaard [mailto:[EMAIL PROTECTED] > >> Sent: Friday, 22 December 2006 9:47 PM > >> To: Venables, Bill (CMIS, Cleveland) > >> Cc: r-devel@stat.math.ethz.ch; [EMAIL PROTECTED] > >> Subject: Re: [Rd] substitute creates an object which prints > >> incorrectly > >> (PR#9427) > >> > >> [EMAIL PROTECTED] wrote: > >> > >>> The function "substitute" seems to fail to make a genuine > >>> substitution, although the printed verision seems fine. > Here is an > >>> example. > >>> > >>> > >>> > >>>> m <- substitute(Y <- function(x) FUN(x+1), > >>>> > >>>> > >>> + list(Y = as.name("y"), FUN = as.name("sin"))) > >>> > >>> > >>>> m > >>>> > >>>> > >>> y <- function(x) sin(x + 1) > >>> > >>> > >>>> eval(m) > >>>> y > >>>> > >>>> > >>> function(x) FUN(x+1) > >>> > >>> However the story doesn't end there. The substitution appears to > >>> have been made, even though the printed version, this > time, suggests > >>> otherwise. > >>> > >>> > >>> > >>>> y(pi) > >>>> > >>>> > >>> [1] -0.841471 > >>> > >>> > >>>> sin(pi+1) > >>>> > >>>> > >>> [1] -0.841471 > >>> > >>> > >>> > >>> > >> Yes, this is (fairly) well known. It has to do with the > retention of > >> function source. > >> > >> The thing to notice is that it is only the printing of y that is > >> really confused. If you do > >> > >> dput(y) > >> attr(y, "source") > >> attr(y, "source") <- NULL > >> y > >> > >> then you should see the point. The tricky bit is that the "source" > >> attribute exists in an intermediate form inside m. Notice that m > >> contains, not the function itself, but a call to the function > >> `function` > >> > >> which creates the function when eval'ed. This call contains the > >> function > >> > >> source as its 4th element (look at m[[3]][[4]] in your > example), and > >> you > >> > >> might try setting it to NULL and see how things will clear up. > >> > >> The issue with substitute is that it cannot sensibly > substitute into > >> character vectors, so it just leaves the source as is, > which gives > >> the symptoms you see. It could, however, and probably should, > >> recognize calls to `function` and NULL out their 4th element. It > >> cannot be done completely failsafe though (`function` could result > >> from a computation, or even be part of the substitution), > so one has > >> to decide that the extreme cases are too extreme worry about them. > >> > >> -pd > >> > >> > >>> Bill Venables > >>> CMIS, CSIRO Laboratories, > >>> PO Box 120, Cleveland, Qld. 4163 > >>> AUSTRALIA > >>> Office Phone (email preferred): +61 7 3826 7251 > >>> Fax (if absolutely necessary): +61 7 3826 7304 > >>> Mobile (rarely used): +61 4 1963 4642 > >>> Home Phone: +61 7 3286 7700 > >>> mailto:[EMAIL PROTECTED] > >>> http://www.cmis.csiro.au/bill.venables/ > >>> > >>> > >>> --please do not edit the information below-- > >>> > >>> Version: > >>> platform = i386-pc-mingw32 > >>> arch = i386 > >>> os = mingw32 > >>> system = i386, mingw32 > >>> status = > >>> major = 2 > >>> minor = 4.1 > >>> year = 2006 > >>> month = 12 > >>> day = 18 > >>> svn rev = 40228 > >>> language = R > >>> version.string = R version 2.4.1 (2006-12-18) > >>> > >>> Windows XP Professional (build 2600) Service Pack 2.0 > >>> > >>> Locale: > >>> > >>> > >> > LC_COLLATE=English_Australia.1252;LC_CTYPE=English_Australia.1252;LC_ > >> MON > >> > >> > ETARY=English_Australia.1252;LC_NUMERIC=C;LC_TIME=English_Australia.1 > >> 252 > >> > >>> Search Path: > >>> .GlobalEnv, .R_Store, package:RODBC, package:xlsReadWrite, > >>> package:cluster, package:vegan, package:ASOR, package:stats, > >>> package:graphics, package:grDevices, package:utils, > >>> package:datasets, .R_Data, .R_Utils, package:svIDE, > package:tcltk, > >>> package:methods, Autoloads, package:base > >>> > >>> ______________________________________________ > >>> 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 > >> > > > > ______________________________________________ > > 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 > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel