Re: [Rd] substitute creates an object whichprints incorrectly (PR#9427)

From: <Mark.Bravington_at_csiro.au>
Date: Sun 07 Jan 2007 - 23:55:38 GMT


> 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:p.dalgaard@biostat.ku.dk]
> >> Sent: Friday, 22 December 2006 9:47 PM
> >> To: Venables, Bill (CMIS, Cleveland)
> >> Cc: r-devel@stat.math.ethz.ch; R-bugs@biostat.ku.dk
> >> Subject: Re: [Rd] substitute creates an object which prints
> >> incorrectly
> >> (PR#9427)
> >>
> >> Bill.Venables@csiro.au 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:Bill.Venables@csiro.au
> >>> 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 Received on Mon Jan 08 11:30:45 2007

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Mon 08 Jan 2007 - 00:31:36 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.