[R] as.character(quote(x$y) ) = "$" "x" "y" not "x$y"?
Spencer Graves
spencer.graves at structuremonitoring.com
Fri May 9 23:32:37 CEST 2014
Hi, Duncan:
Thanks very much. I used to think that everything in R was a
object. Now I know that is.object(quote(x)) is FALSE. (A decade ago,
S-Plus asked me if I wanted to save changes to history. I thought,
"Wow! Do I get to change history?"
Hadley's "Advanced R" book mentions "Reference classes" in his
"OO field guide". It includes an example where changing "a" changes a
"copy" previously made:
b <- a
b$balance
#> [1] 200
a$balance <- 0
b$balance
#> [1] 0
This bothers me far more than an object in R that's not an object
;-)
Best Wishes,
Spencer
On 5/9/2014 6:48 AM, Bert Gunter wrote:
> Ahhh. Thanks Duncan.
>
> -- 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 Fri, May 9, 2014 at 2:41 AM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
>> 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.
>>>>>>>>>
More information about the R-help
mailing list