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

Spencer Graves spencer.graves at structuremonitoring.com
Fri May 9 23:50:53 CEST 2014


Dear Hadley:


       Thanks for that.  Digits are not numbers.  Numbers are not data.  
Data is not information.  Information is not intelligence. Intelligence 
is not knowledge.  Knowledge is not wisdom.  And your "is." warnings are 
more useful than my trivia here.


       Spencer


On 5/9/2014 2:42 PM, Hadley Wickham wrote:
> Beware of the is.* functions:
>
> * is.object() does not test the usual definition of objects
> * is.vector() does not test the usual definition of vectors
> * is.numeric() does not work the same way as is.character() or is.integer()
> * is.Date() doesn't exist
> * is.nan() doesn't return TRUE for some NaNs
>
> Hadley
>
> On Fri, May 9, 2014 at 4:32 PM, Spencer Graves
> <spencer.graves at structuremonitoring.com> wrote:
>> 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.
>>>>>>>>>>>
>> ______________________________________________
>> 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