Rcpp中`STRING_ELT`的含义

时间:2018-02-07 15:01:52

标签: rcpp

我搜索了RCPP的源代码但是找不到STRING_ELT的定义,是否有人指向我可以在RCPP中找到宏的所有定义的参考?

1 个答案:

答案 0 :(得分:3)

这是 R 通过以下方式访问的内部成员的一部分:

#include <R.h>
#include <Rinternals.h>

请参阅5.9.7 Handling character dataWriting R Extensions

  

R字符向量存储为STRSXP,类似于VECSXP的向量类型   其中每个元素都是CHARSXP类型。 CHARSXP的元素   使用STRING_ELT和SET_STRING_ELT访问STRSXP。

     

CHARSXP是只读对象,绝不能修改。在   特别是,CHARSXP中包含的C风格字符串应该是   被视为只读,因此使用CHAR函数   访问CHARSXP的字符数据返回(const char *)(这个   还允许编译器发出有关不当使用的警告)。以来   CHARSXP是不可变的,任何STRSXP都可以共享相同的CHARSXP   需要一个表示相同字符串的元素。 R保持全球化   CHARSXP的缓存,以便只有一个CHARSXP表示   内存中的给定字符串。

     

您可以通过调用mkChar并提供一个来获取CHARSXP   以空字符结尾的C风格字符串。这个函数会返回一个   如果已存在具有匹配字符串的CHARSXP,则预先存在CHARSXP   否则它将创建一个新的并将其添加到缓存之前   把它还给你。 mkCharLen变体可用于创建   CHARSXP来自缓冲区的一部分,将确保空终止。

     

请注意,R字符串限制为2 ^ 31 - 1个字节,并且   因此,mkChar的输入应该是(C允许更长的字符串   64位平台)。