[R] as.character(quote(x$y) ) = "$" "x" "y" not "x$y"?

Duncan Murdoch murdoch.duncan at gmail.com
Fri May 9 11:41:33 CEST 2014


On 09/05/2014, 2:41 AM, Bert Gunter wrote:
> Spencer:
>
> Hmmm....
> Well, I don't get what's going on here -- as.character.default is
> internal -- but could you method-ize a simple synonym:

See ?InternalMethods:

"For efficiency, internal dispatch only occurs on objects, that is those 
for which is.object returns true."

Duncan Murdoch


>
> asChar<- function(e,...)UseMethod("asChar")
> asChar.call <- function(e,...)deparse(e,...)
> asChar.default <- function(e,...)as.character(e,...)
>
>> asChar(xDy)
> [1] "x$y"
>
>> asChar(1:5)
> [1] "1" "2" "3" "4" "5"
>
>
> Cheers,
> Bert
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
> (650) 467-7374
>
> "Data is not information. Information is not knowledge. And knowledge
> is certainly not wisdom."
> H. Gilbert Welch
>
>
>
>
> On Thu, May 8, 2014 at 8:56 PM, Spencer Graves
> <spencer.graves at structuremonitoring.com> wrote:
>> On 5/8/2014 8:05 PM, Bert Gunter wrote:
>>>
>>> [1] "x$y"
>>>
>>> Spencer:
>>>
>>> Does
>>>
>>> deparse(substitute(x$y))
>>> [1] "x$y"
>>>
>>> do what you want?
>>
>>
>>
>>        No:  The problem is methods dispatch.  class(quote(x$y)) = 'call', but
>> as.character(quote(x$y)) does NOT go to "as.character.call".
>>
>>
>>        deparse(quote(x$y)) returns the answer I want, as Greg Snow noted
>> earlier.
>>
>>
>>        However, it would be easier to remember if I could write
>> as.character(quote(x$y)) and get the same thing.
>>
>>
>>        With "as.character.call <- function(x, ...)deparse(x, ...)",
>> as.character.call(quote(x$y)) returns "x$y", as desired. However, the
>> methods dispatch one might naively expect fails, as noted above.
>>
>>
>>        Thanks,
>>        Spencer
>>
>>> Cheers,
>>> Bert
>>>
>>>
>>>
>>>
>>>
>>>
>>> -- Bert
>>>
>>> Bert Gunter
>>> Genentech Nonclinical Biostatistics
>>> (650) 467-7374
>>>
>>> "Data is not information. Information is not knowledge. And knowledge
>>> is certainly not wisdom."
>>> H. Gilbert Welch
>>>
>>>
>>>
>>>
>>> On Thu, May 8, 2014 at 5:56 PM, Spencer Graves
>>> <spencer.graves at structuremonitoring.com> wrote:
>>>>
>>>>             "as.character.call" seems not to work as an alias for deparse.
>>>> Consider the following:
>>>>
>>>>
>>>> xDy <- quote(x$y)
>>>> class(xDy)
>>>> "call"
>>>> as.character.call <- function(x, ...)deparse(x, ...)
>>>> as.character(xDy)
>>>> [1] "$" "x" "y"
>>>> # fails
>>>>
>>>> str(xDy)
>>>> #  language x$y
>>>> as.character.language <- function(x, ...)"language"
>>>>
>>>> as.character(xDy)
>>>> [1] "$" "x" "y"
>>>>
>>>>
>>>>             Is it feasible to construct a method for "as.character" that
>>>> works
>>>> for objects of class "call"?
>>>>
>>>>
>>>>             Thanks,
>>>>             Spencer
>>>>
>>>>
>>>> #################
>>>>
>>>>
>>>> Thanks for the quick replies from Richard Heiberger, Greg Show & Bert
>>>> Gunter.
>>>>
>>>>
>>>>         Might it make sense to create as.character.call as an alias for
>>>> deparse?
>>>>
>>>>
>>>>         A few years ago, I wrote several functions like "predict.fd" as
>>>> aliases for functions with less memorable names like "eval.fd".  Doing
>>>> that
>>>> made the "fda" package easier to use, at least for me ;-)
>>>>
>>>>
>>>>         Thanks again,
>>>>         Spencer
>>>>
>>>>
>>>> On 5/7/2014 2:39 PM, Bert Gunter wrote:
>>>>>
>>>>> ... and
>>>>>
>>>>>> str(quote(x$y))
>>>>>
>>>>>     language x$y
>>>>>
>>>>>> as.list(quote(x$y))
>>>>>
>>>>> [[1]]
>>>>> `$`
>>>>>
>>>>> [[2]]
>>>>> x
>>>>>
>>>>> [[3]]
>>>>> y
>>>>>
>>>>> ## may be instructive.
>>>>>
>>>>> Cheers,
>>>>> Bert
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Bert Gunter
>>>>> Genentech Nonclinical Biostatistics
>>>>> (650) 467-7374
>>>>>
>>>>> "Data is not information. Information is not knowledge. And knowledge
>>>>> is certainly not wisdom."
>>>>> H. Gilbert Welch
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, May 7, 2014 at 2:30 PM, Greg Snow <538280 at gmail.com> wrote:
>>>>>>>
>>>>>>> deparse(quote(x$y))
>>>>>>
>>>>>> [1] "x$y"
>>>>>>
>>>>>> It looks like deparse does what you want here.
>>>>>>
>>>>>> On Wed, May 7, 2014 at 3:23 PM, Spencer Graves
>>>>>> <spencer.graves at structuremonitoring.com> wrote:
>>>>>>>
>>>>>>> Hello, All:
>>>>>>>
>>>>>>>
>>>>>>>          Is there a simple utility someplace to convert "quote(x$y)" to
>>>>>>> "x$y"?
>>>>>>>
>>>>>>>
>>>>>>>          I ask, because as.character(quote(x$y)) is a character vector
>>>>>>> of
>>>>>>> length 3 =  "$" "x" "y".  I want to convert this to "x$y" for a
>>>>>>> diagnostic
>>>>>>> message.
>>>>>>>
>>>>>>>
>>>>>>>          class(quote(x$y)) = "call", which suggests I could write
>>>>>>> "as.character.call" to perform this function.  However, before I do, I
>>>>>>> felt
>>>>>>> a need to ask for other thoughts on this.
>>>>>>>
>>>>>>>
>>>>>>>          Thanks,
>>>>>>>          Spencer
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Gregory (Greg) L. Snow Ph.D.
>>>>>>> 538280 at gmail.com
>>>>>>>
>>>>>>> ______________________________________________
>>>>>>> R-help at r-project.org mailing list
>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>>>> PLEASE do read the posting guide
>>>>>>> http://www.R-project.org/posting-guide.html
>>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>>
>>>
>>
>>
>> --
>> Spencer Graves, PE, PhD
>> President and Chief Technology Officer
>> Structure Inspection and Monitoring, Inc.
>> 751 Emerson Ct.
>> San José, CA 95126
>> ph:  408-655-4567
>> web:  www.structuremonitoring.com
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list