我搜索了RCPP的源代码但是找不到STRING_ELT的定义,是否有人指向我可以在RCPP中找到宏的所有定义的参考?
答案 0 :(得分:3)
这是 R 通过以下方式访问的内部成员的一部分:
#include <R.h>
#include <Rinternals.h>
请参阅5.9.7 Handling character data的Writing 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位平台)。