将char*转换为SEXP

将char*转换为SEXP,r,rcpp,R,Rcpp,我需要将已知长度的const char*转换为Rcpp::RawVector以返回到R Rcpp::wrap适用于许多类型,但似乎不适用于char*OP did@KonstantinAzizov。他们试图使用类似于Rcpp::wrap(var)的东西,其中var是一个const char*,并且在Rcpp中没有自动处理程序。问题是是否需要一对一映射,或者是否要序列化const char*?在这种情况下,软件包(由eg使用)可以提供帮助。在我的情况下,我想将序列化数据从R传递到另一个应用程序,反之

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


Rcpp::wrap
适用于许多类型,但似乎不适用于
char*

OP did@KonstantinAzizov。他们试图使用类似于
Rcpp::wrap(var)
的东西,其中
var
是一个
const char*
,并且在Rcpp中没有自动处理程序。问题是是否需要一对一映射,或者是否要序列化
const char*
?在这种情况下,软件包(由eg使用)可以提供帮助。在我的情况下,我想将序列化数据从R传递到另一个应用程序,反之亦然,因为它将R对象序列化到/从Redis。你不妨直接和另一个盒子说话。那里的实现意味着高效——因此可以访问前面提到的内容。谢谢你,这个解决方案对我来说很有用!我想知道有没有更简洁的方法rcpp@MarcFaddoul
向量
构造函数可能更简洁。您应该在@nrussell中添加它作为答案。它比我的好,我记得我在一个内部工作包中使用了很多相同的构造(叹气)。我很欣赏这种感觉,但如果我一开始没有看到你的答案,我甚至不会费心去研究它。请随时将其添加到您的解决方案中。谢谢@nrussell,这正是我想要的!为更新hrbmstr干杯
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"
#include <Rcpp.h>
#include <cstring>

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