首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rcpp偏差当量

Rcpp偏差当量
EN

Stack Overflow用户
提问于 2014-11-17 21:27:39
回答 2查看 104关注 0票数 3

Rcpp中是否有与deparse等价的功能?例如,在deparse(list(a=1, b = "foo"))中什么是Rcpp?就像,

代码语言:javascript
复制
// [[Rcpp::export]]
void WriteCapInfo (List args) {
  Rcout << deparse(args) << endl;   
}

如果这是不可能的,我知道R中的deparse是内部实现的deparse.c。关于如何在Rcpp中调用它,有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-23 15:25:32

在进行了更多的搜索之后,我偶尔会看到要旨 by 罗曼·弗朗索瓦

代码通过names.c中定义的内部函数表进行扫描。因此,它允许获取指向任何内部函数的指针,然后可以调用该指针。

代码语言:javascript
复制
typedef SEXP (*CCODE)(SEXP, SEXP, SEXP, SEXP);

typedef struct {
    PPkind kind;     /* deparse kind */
    PPprec precedence; /* operator precedence */
    unsigned int rightassoc;  /* right associative? */
} PPinfo;

typedef struct {
    char   *name;    /* print name */
    CCODE  cfun;     /* c-code address */
    int    code;     /* offset within c-code */
    int    eval;     /* evaluate args? */
    int    arity;    /* function arity */
    PPinfo gram;     /* pretty-print info */
} FUNTAB;

extern FUNTAB   R_FunTab[];     /* Built in functions */ 

CCODE get_internal( std::string name){
    FUNTAB* p = R_FunTab ;
    for( ; p->name != NULL; ++p ){
        if( name == p->name )
            return p->cfun ;
    }
    return NULL ;
}

/* Information for Deparsing Expressions */
typedef enum {
    PP_INVALID  =  0,
    PP_ASSIGN   =  1,
    PP_ASSIGN2  =  2,
    PP_BINARY   =  3,
    PP_BINARY2  =  4,
    PP_BREAK    =  5,
    PP_CURLY    =  6,
    PP_FOR      =  7,
    PP_FUNCALL  =  8,
    PP_FUNCTION =  9,
    PP_IF   = 10,
    PP_NEXT   = 11,
    PP_PAREN    = 12,
    PP_RETURN   = 13,
    PP_SUBASS   = 14,
    PP_SUBSET   = 15,
    PP_WHILE    = 16,
    PP_UNARY    = 17,
    PP_DOLLAR   = 18,
    PP_FOREIGN  = 19,
    PP_REPEAT   = 20
} PPkind;

typedef enum {
    PREC_FN  = 0,
    PREC_LEFT    = 1,
    PREC_EQ  = 2,
    PREC_RIGHT   = 3,
    PREC_TILDE   = 4,
    PREC_OR  = 5,
    PREC_AND     = 6,
    PREC_NOT     = 7,
    PREC_COMPARE = 8,
    PREC_SUM     = 9,
    PREC_PROD    = 10,
    PREC_PERCENT = 11,
    PREC_COLON   = 12,
    PREC_SIGN    = 13,
    PREC_POWER   = 14,
    PREC_DOLLAR  = 15,
    PREC_NS  = 16,
    PREC_SUBSET  = 17
} PPprec;
票数 0
EN

Stack Overflow用户

发布于 2014-11-17 22:46:16

您只需使用R函数:

代码语言:javascript
复制
Function deparse("deparse") ;
Rf_PrintValue( deparse(args) ) ;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26982291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档