2

我想知道是否有Rcpp办法将元素或迭代器转换为const CharacterVector&to 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) );

但是,在我的情况下,我不想创建一个时间长的字符串向量。

谢谢回答。

4

2 回答 2

1

我对您想要的感到困惑- CharacterVector 是字符串的向量(如在 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>
于 2013-03-13T20:00:54.247 回答
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];
}
于 2016-11-14T11:49:42.537 回答