我想知道是否有Rcpp
方式将const CharacterVector&
的元素或迭代器转换为std::string
。如果我尝试以下代码
void as(const CharacterVector& src) {
std::string glue;
for(int i = 0;i < src.size();i++) {
glue.assign(src[i]);
}
}
将发生编译时错误:
no known conversion for argument 1 from ‘const type {aka SEXPREC* const}’ to ‘const char*’
到目前为止,我使用C API进行转换:
glue.assign(CHAR(STRING_ELT(src.asSexp(), i)));
我的Rcpp版本是0.10.2。
顺便说一句,我知道有Rcpp::as
。
glue.assign(Rcpp::as<std::string>(src[i]));
上面的代码会产生运行时错误:
Error: expecting a string
另一方面,以下代码正确运行:
typedef std::vector< std::string > StrVec;
StrVec glue( Rcpp::as<StrVec>(src) );
但是,我不想在我的情况下创建一个时间长的字符串向量。
感谢您的回答。
答案 0 :(得分:1)
我很困惑,因为你想要的东西 - 一个CharacterVector是一个字符串的 vector (如在R中),所以你只能将它映射到std::vector<std::string> >
。这是一个非常简单,非常简单的手册示例(我认为我们有自动转换器,但可能没有。或者没有。
#include <Rcpp.h>
// [[Rcpp::export]]
std::vector<std::string> ex(Rcpp::CharacterVector f) {
std::vector<std::string> s(f.size());
for (int i=0; i<f.size(); i++) {
s[i] = std::string(f[i]);
}
return(s);
}
这是在工作:
R> sourceCpp("/tmp/strings.cpp")
R> ex(c("The","brown","fox"))
[1] "The" "brown" "fox"
R>
答案 1 :(得分:1)
在Rcpp 0.12.7中,我可以使用Rcpp::as<std::vector<std::string> >
。以下函数返回test
数组的第二个元素:
std::string test() {
Rcpp::CharacterVector test = Rcpp::CharacterVector::create("a", "z");
std::vector<std::string> test_string = Rcpp::as<std::vector<std::string> >(test);
return test_string[1];
}