关于Rinternals的“VECTOR_SEXPREC”的文档

时间:2015-07-23 15:31:31

标签: r

在Rinternals.h中,VECTOR_SEXPREC struct定义为:

typedef struct VECTOR_SEXPREC {
    SEXPREC_HEADER;
    struct vecsxp_struct vecsxp;
} VECTOR_SEXPREC, *VECSEXP;

where

struct vecsxp_struct {
    R_len_t length;
    R_len_t truelength;
};

#define SEXPREC_HEADER \
    struct sxpinfo_struct sxpinfo; \
    struct SEXPREC *attrib; \
    struct SEXPREC *gengc_next_node, *gengc_prev_node

typedef union { VECTOR_SEXPREC s; double align; } SEXPREC_ALIGN;

据说SEXPREC_HEADER中的两个最后一个指针“用于维护colector的链表结构”。与SEXPREC结构不同,其中节点数据似乎表示为结构的u联合成员,在这个结构中,我看不出它的哪个成员代表'节点数据'。

DATAPTR(x)(数据访问宏)定义为:

#define DATAPTR(x)  (((SEXPREC_ALIGN *) (x)) + 1)

似乎数据对应于x后面的指针,但我不明白这是如何工作的。有没有明确解释过的文件? (我已经在R内部进行了搜索,但我没有找到很多)

感谢。

1 个答案:

答案 0 :(得分:0)

恰当命名的R Internals手册讨论了Section 1.1中的SEXP对象。