[Rd] problem with print.generic(x)deparse(substitute(x))
Spencer Graves
spencer.graves at prodsyse.com
Mon Jan 9 16:01:04 CET 2017
On 2017-01-09 8:19 AM, Spencer Graves wrote:
> Hi, Peter et al.:
>
>
> On 2017-01-09 4:24 AM, peter dalgaard wrote:
>> On 09 Jan 2017, at 10:53 , Spencer Graves
>> <spencer.graves at prodsyse.com> wrote:
>>
>>> # Define an object of class 'dum'
>>> k <- 1
>>> class(k) <- 'dum'
>>> str(k) # as expected
>>>
>>> # Define print.dum
>>> print.dum <- function(x, ...)
>>> deparse(substitute(x))
>>>
>>> print(k) # Prints "k" as expected
>>> #####**** THE FOLLOWING PRINTS NOTHING:
>>> k # Why?
>>
>> Because it doesn't work that way...
>>
>> First of all, your print.dum relies on autoprinting of its return
>> value, it doesn't print anything itself. That's not how one usually
>> writes print methods: You should print something and (usually) return
>> the argument invisibly.
>>
>> Autoprinting calls the print method to do the actual printing and
>> returns the object invisibly, irrespective of the return value from
>> the print method. To wit:
>>
>>> k
>>> dput(.Last.value)
>> structure(1, class = "dum")
>>
>> (Trying to print the return value would invite infinite looping.)
>>
>> However, there's another catch: deparse(substitute(...)) relies on
>> knowing the argument to print() before evaluation, but autoprinting
>> does not retain that information, it just looks at the object that
>> has been computed and passes it to the relevant print method, so you
>> get this effect:
>>
>>> print.dum <- function(x, ...)
>> + print(deparse(substitute(x)))
>>> k
>> [1] "x"
>
> Thanks. Permit me to ask my real question: Is there a way to
> modify print.findFn{sos} so I can print "k" in the second line of the
> HTML from the following:
>
>
> (k <- findFn('spline', 1))
>
>
> Currently, the HTML starts as follows:
>
>
> findFunction Results
> call: findFn(string = "spline", maxPages = 1)
>
>
> I want it to start as follows:
>
>
> findFn Results
>
> call: (k <- findFn(string = "spline", maxPages = 1))
> For a package summary: installPackages(k); writeFindFn2xls(k)
>
>
> When I added "ds <- deparse(substitute(x))" to "print.findFn", I
> got ds = "x", not "k" from "(k <- findFn('spline', 1))" and from "k"
> by itself (autoprint) but
> "k" [correction; please excuse] from "print(k)". Thanks to Peter for
> explaining this problem. Is there a work around?
>
>
> Spencer
>
>> -pd
>>
>>
>>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list