1.1.3 data

Keywords:

Next: ,Previous: Rest of header,Up: SEXPs

1.1.3 `data'

SEXPREC 是一种 C 结构。它包括一个 32 位的如上所述的头字节,三个指针(指向属性,前后节点)和一个用联合(union)表示的节点数据

     union {

         struct primsxp_struct primsxp;

         struct symsxp_struct symsxp;

         struct listsxp_struct listsxp;

         struct envsxp_struct envsxp;

         struct closxp_struct closxp;

         struct promsxp_struct promsxp;

     } u;

所有这些可选对象(除了第一个,它是int)是三个指针,因此一个联合占用了三个词(three words)。

向量类型有 RAWSXPCHARSXP, LGLSXP,INTSXP, REALSXP, CPLXSXP, STRSXP,VECSXP, EXPRSXPWEAKREFSXP。需要明白的是,这些类型都是 VECTOR_SEXPREC,每一个都含有头字节和同样的三个指针,但随后的两个整数给出向量的长度和`事实长度'(`true length')1,而后是数据(根据需要排列:在大多数32位系统中,数据通过 24 字节的VECTOR_SEXPREC 节点直接连在节点后面)。数据是以适当长度存储`事实长度'的元素的内存块(大约是8字节的倍数,通过在 gc() 的档案记录的8字节块的`Vcells'存储 )。

不同类型的`data'(数据)在下面的表中列出。许多类型是解释型的(interpretation),即这些类型不需要校验。

NILSXP
只有类型 NILSXP 的一种对象 R_NilValue没有数据。
SYMSXP
通过PRINTNAME (一种CHARSXP),SYMVALUEINTERNAL 访问三个节点,名字,值和内部结构的指针。(如果符号的值是一个 .Internal 函数,最后一个则是一个指向适当 SEXPREC 的指针。)许多符号有 SYMVALUE R_UnboundValue
LISTSXP
指向 CAR, CDR (通常是 LISTSXPNULL)和 TAG(通常是 SYMSXP)的指针.
CLOSXP
指向形式参数(formals,一个成对列表),内容和环境的指针。
ENVSXP
指向框架,闭包环境和哈希表(NULLVECSXP)的指针。框架指的是一个标记过的成对列表(标签是符号,CAR是绑定的值)。
PROMSXP
指向值,表达式和环境(在里面对表达式求值)的指针。一旦一个允诺被求值,环境就会被设为NULL
LANGSXP
这是 LISTSXP 用于函数调用的一种特别类型。(CAR 引用函数(一般通过符号或语言对象),而 CDR是以标签指定特定参数的参数列表。)R-层次的文档提到`表达式'(`expressions')/`语言对象'( `language objects')多半指 LANGSXP,但它们也可以是符号(SYMSXP) 或表达式向量(EXPRSXP)。
SPECIALSXP
BUILTINSXP
指定primitives/.Internal 表中的偏移量。
CHARSXP
lengthtruelength后面有字节块相随(允许nul结尾)。
LGLSXP
INTSXP
lengthtruelength 后面有 C 的int(整数)构成的块相随(在所有的R平台上都是32位的)。
REALSXP
lengthtruelength 后面有C 的 double 构成的块相随。
CPLXSXP
lengthtruelength后面有 C99 的double complex 或等价结构构成的块相随。
STRSXP
lengthtruelength 后面有指针(指向CHARSXPSEXP)构成的块相随。
DOTSXP
LISTSXP中为... 符号绑定的值设计的一个特殊类型:允诺的成对列表。
ANYSXP
该类型用于放置任何类型:这种类型没有真实的对象。
VECSXP
EXPRSXP
lengthtruelength后面有指针构成的块相随。这些类型在内部一致(同STRSXP)但在语句解释时可能会不一样2
BCODESXP
为今后的字节码编译器设计。
EXTPTRSXP
有三个指针,分别指向指针,保护值(the protection alue,在运行时,保护该对象的 R 对象)和标签(可能是SYMSXP)。
WEAKREFSXP
WEAKREFSXP 是一种长度为4,含有元素key, value, finalizernext的特殊 VECSXP 类型。key 可以是 NULL,环境或者外部指针,而 finalizer 是一个函数或 NULL
RAWSXP
lengthtruelength 后面有字节块相随。
S4SXP
两个没有使用的指针和一个标签。

Footnotes

[1] 这很少使用。现在只用于环境的哈希表(VECSXP),其中length 是表的大小而 truelength 是实际使用的原始槽变量(primary slots)的个数;或者用于串行化的参考哈希表(VECSXP),其中 truelength也是实际使用的槽变量的个数。

[2] 译者注:原句为“Theseare internally identical (and identical to STRSXP) but differ inthe interpretations placed on the elements.”

Hits:Loading...

special topic