首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RcppParallel:将CharacterMatrix转换为RMatrix<T>

RcppParallel:将CharacterMatrix转换为RMatrix<T>
EN

Stack Overflow用户
提问于 2015-03-18 01:14:52
回答 1查看 352关注 0票数 2

大家好,亲爱的社区:

我正在学习RcppParallel,在尝试使用以下代码将Rcpp::CharacterMatrix转换为RcppParallel::RMatrix时遇到此问题:

代码语言:javascript
复制
struct CharMatDist : RcppParallel::Worker {
    const RcppParallel::RMatrix<std::string> A; 
    const RcppParallel::RMatrix<std::string> B; 
    const NumericVector w; 
    RcppParallel::RMatrix<double> ret; 
    int n; 

    CharMatDist(CharacterMatrix A, CharacterMatrix B, NumericVector w, NumericMatrix ret)
    : A(A), B(B), w(w), ret(ret) {
        n = B.nrow();
    }

...

}

正如图库所建议的,我希望在A(A)等中自动执行转换,但它不起作用,并给出以下错误:

代码语言:javascript
复制
cannot convert 'Rcpp:Matrix<16>::iterator (aka Rcpp::internal::Proxy_iterator<Rcpp::internal::string_proxy<16> >)' to 'char*' in initialization

我也试过了

代码语言:javascript
复制
RMatrix<char>

甚至在身体上手工铸造也没有成功。我哪里做错了??

如有任何建议和帮助,我们将不胜感激。

YYA

EN

回答 1

Stack Overflow用户

发布于 2015-03-18 14:24:27

这里的问题是,CharacterVectorCharacterMatrix类型实际上只是SEXP的向量--更具体地说,CharacterVector包装了一个STRSXP,它的内容是SEXP的数组(运行时类型为CHARSXP)。不幸的是,在与R的字符类型交互时,了解这些细节是必要的。

我不知道这是否可行,但如果可行,您可能希望使用类似于RMatrix<SEXP>的东西,它(假定)映射到矩阵中的底层CHARSXP --其中您可以使用CHAR访问带下划线的const char*字符串。

不幸的是,在这种情况下,RMatrix类不够“智能”,不能直接提供对底层字符串的访问,所以我相信您必须自己解开它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29105531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档