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

Bert Gunter gunter.berton at gene.com
Fri May 9 08:41:29 CEST 2014


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:

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
>



More information about the R-help mailing list