将char*转换为SEXP

Mar*_*oul 3 r rcpp

我需要将const char*已知长度转换为a Rcpp::RawVector以返回到R.

Rcpp::wrap适用于多种类型,但似乎不起作用char *.

hrb*_*str 7

library(Rcpp)
library(inline)

ƒ <- rcpp(body='
const char* text = "this is some text";
Rcpp::RawVector rv(strlen(text));
for(unsigned int i=0; i<strlen(text); i++) { rv[i] = text[i]; }
return(rv);
')

ƒ()
##  [1] 74 68 69 73 20 69 73 20 73 6f 6d 65 20 74 65 78 74

rawToChar(ƒ())
## [1] "this is some text"
Run Code Online (Sandbox Code Playgroud)

UPDATE

@nrussell方法是更好的方式:

#include <Rcpp.h>
#include <cstring>

// [[Rcpp::export]]
Rcpp::RawVector to_raw(const char* str) {
    Rcpp::RawVector res(str, str + std::strlen(str));
    return res;
}
Run Code Online (Sandbox Code Playgroud)

  • @Marc Faddoul`Fector`构造函数[接受开始和结束迭代器](https://gist.github.com/nathan-russell/edbe275162037a98b1c517baae26f016),它可能*略微更简洁. (2认同)
  • 你应该把它作为答案添加@nrussell.这是++ gd比我的好,我记得那个,因为我在内部工作pkg(叹气)中使用了相同的构造. (2认同)
  • 我很欣赏这种情绪,但如果我一开始没有看到你的答案,我就不会费心去研究它.请随意将其添加到您的解决方案中. (2认同)