How to get an object name from C?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How to get an object name from C?

Daniel Cegiełka

(earlier I sent it as html by mistake).

Hi,

How can I get from C an object name used as a function argument? I
have sample code in C that gives me access to the name of the function
being called:


SEXP xname(SEXP x)
{
        const char *fun_name = CHAR(PRINTNAME(CAR(x)));
        x =  CDR(x);
        const char *arg_name = isNull(TAG(x)) ? "" : CHAR(PRINTNAME(TAG(x)));

        Rprintf("fn_name: %s, arg_name: %s\n", fun_name, arg_name);
        return R_NilValue;
}


> xname <- function(...) invisible(.External("xname", ...))
>
> x1 = 123
>
> xname(x1)
fn_name: xname, var_name:


However, I am trying to find a way to access the object name. In the
documentation I found a solution for named args:


> xname(arg = x1)
fn_name: xname, var_name: arg


And I'd like to find the equivalent in C for substitute():

> substitute(x1)
x1


Best regards,
Daniel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to get an object name from C?

R devel mailing list
Since substitute() is implemented in C, you could look at its implementation.

On Fri, Jan 24, 2020 at 1:09 AM Daniel Cegiełka
<[hidden email]> wrote:

>
>
> (earlier I sent it as html by mistake).
>
> Hi,
>
> How can I get from C an object name used as a function argument? I
> have sample code in C that gives me access to the name of the function
> being called:
>
>
> SEXP xname(SEXP x)
> {
>         const char *fun_name = CHAR(PRINTNAME(CAR(x)));
>         x =  CDR(x);
>         const char *arg_name = isNull(TAG(x)) ? "" : CHAR(PRINTNAME(TAG(x)));
>
>         Rprintf("fn_name: %s, arg_name: %s\n", fun_name, arg_name);
>         return R_NilValue;
> }
>
>
> > xname <- function(...) invisible(.External("xname", ...))
> >
> > x1 = 123
> >
> > xname(x1)
> fn_name: xname, var_name:
>
>
> However, I am trying to find a way to access the object name. In the
> documentation I found a solution for named args:
>
>
> > xname(arg = x1)
> fn_name: xname, var_name: arg
>
>
> And I'd like to find the equivalent in C for substitute():
>
> > substitute(x1)
> x1
>
>
> Best regards,
> Daniel
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



--
Michael Lawrence
Senior Scientist, Bioinformatics and Computational Biology
Genentech, A Member of the Roche Group
Office +1 (650) 225-7760
[hidden email]

Join Genentech on LinkedIn | Twitter | Facebook | Instagram | YouTube

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel