[R] How to output name of object

Bert Gunter gunter.berton at gene.com
Wed Jun 18 16:26:40 CEST 2014


Ah, yes. Much better -- that is what match.call() is for.
As always, thanks for the insight,

Best,
Bert

Bert Gunter
Genentech Nonclinical Biostatistics
(650) 467-7374

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
Clifford Stoll




On Wed, Jun 18, 2014 at 7:15 AM, Prof Brian Ripley
<ripley at stats.ox.ac.uk> wrote:
> On 18/06/2014 15:01, Bert Gunter wrote:
>>
>> Would
>>
>> f <- function (...)
>> {
>>    sapply(substitute(list(...)),deparse)[-1]
>> }
>>
>>> f(a1=log(1:4), m1=1:4, c1=pi)
>>
>>          a1         m1         c1
>> "log(1:4)"      "1:4"       "pi"
>>
>> be equivalent?
>> I find the substitute(...()) construction completely mysterious, while
>> substitute(list(...)) makes sense to me.
>
>
> It would give the same result.  If starting from scratch I would probably
> have used
>
> f <- function(...) as.character(match.call()[-1])
>
> but that does not give names (if wanted) whereas
>
> f <- function(...) sapply(match.call(), deparse)[-1]
>
> does
>
>
> My main point was that a for() loop (and extending a logical vector
> initialized to NA and then coerced to character) seems rather unnatural.
> And seq_along would be clearer if you really must use a loop.
>
>>
>> Cheers,
>> Bert
>>
>>
>>
>>
>> Bert Gunter
>> Genentech Nonclinical Biostatistics
>> (650) 467-7374
>>
>> "Data is not information. Information is not knowledge. And knowledge
>> is certainly not wisdom."
>> Clifford Stoll
>>
>>
>>
>>
>> On Wed, Jun 18, 2014 at 5:41 AM, Prof Brian Ripley
>> <ripley at stats.ox.ac.uk> wrote:
>>>
>>> On 18/06/2014 12:54, Jim Lemon wrote:
>>>>
>>>>
>>>> On Wed, 18 Jun 2014 04:24:58 PM yzh lin wrote:
>>>>>
>>>>>
>>>>> Hi, every R user,
>>>>>
>>>>>      I wanna output  names of objects, I googled codes from website,
>>>>
>>>>
>>>> but it
>>>>>
>>>>>
>>>>> was not what I wanted.
>>>>>
>>>>> the codes are as following:
>>>>>
>>>>> f <- function (...)
>>>>> {
>>>>>     unevaluatedArgs <- substitute(...())
>>>>>     evaluatedArgs <- list(...)
>>>>>     stopifnot(length(unevaluatedArgs) == length(evaluatedArgs))
>>>>>     tags <- vapply(unevaluatedArgs, FUN=function(x) deparse(x)[1],
>>>>>                    FUN.VALUE=character(1))
>>>>>     if (!is.null(tmp <- names(evaluatedArgs))) {
>>>>>       # if argument is tagged, tag=expr, use the tag
>>>>>       i <- !is.na(tmp) & tmp != ""
>>>>>       tags[i] <- tmp[i]
>>>>>     }
>>>>>     tags
>>>>> }
>>>>>
>>>>> f(a1=log(1:4), m1=1:4, c1=pi)
>>>>>
>>>>> results:
>>>>>>
>>>>>>
>>>>>> f(a1=log(1:4), m1=1:4, c1=pi)
>>>>>
>>>>>
>>>>>
>>>>>     a1   m1   c1
>>>>> "a1" "m1" "c1"
>>>>>
>>>>>
>>>>> what I wanted is outputting "log(1:4) " "1:4", "pi" , while not "a1"
>>>>> "m1"
>>>>> "c1" .
>>>>>
>>>>> Coulde someone tell me how to get the results I wanted?
>>>>>
>>>> Hi Yuanzhen,
>>>> This may be of some help:
>>>>
>>>> f<-function (...) {
>>>>     unevaluatedArgs <- unlist(substitute(...()))
>>>>     tags<-NA
>>>>     for(arg in 1:length(unevaluatedArgs))
>>>>      tags[arg]<-deparse(unevaluatedArgs[[arg]])
>>>>     tags
>>>> }
>>>>
>>>> f(a1=log(1:4), m1=1:4, c1=pi)
>>>> [1] "log(1:4)" "1:4"      "pi"
>>>
>>>
>>>
>>> Or simply
>>>
>>> f <- function(...) sapply(subsitute(...()), deparse)
>>>
>>> which even keeps the names.
>>>
>>> --
>>> Brian D. Ripley,                  ripley at stats.ox.ac.uk
>>> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>>> University of Oxford,             Tel:  +44 1865 272861 (self)
>>> 1 South Parks Road,                     +44 1865 272866 (PA)
>>> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>>>
>>> ______________________________________________
>>> 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.
>
>
>
> --
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-help mailing list