Rcp并行:将CharacterMatrix转换为RMatrix<T> [英] RcppParallel: Converting CharacterMatrix to RMatrix<T>

查看:81
本文介绍了Rcp并行:将CharacterMatrix转换为RMatrix<T>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,亲爱的社区,

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

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)等中自动执行转换,但它不起作用,并给出以下错误:

cannot convert 'Rcpp:Matrix<16>::iterator (aka Rcpp::internal::Proxy_iterator<Rcpp::internal::string_proxy<16> >)' to 'char*' in initialization

我也试过

RMatrix<char>

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

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

YYA

推荐答案

这里的问题是,CharacterVectorCharacterMatrix类型实际上只是SEXP的矢量--更具体地说,a包装了STRSXP,其内容是SEXP的数组(运行时类型CHARSXP)。遗憾的是,在与R的字符类型交互时,了解这些详细信息是必要的。

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

不幸的是,RMatrix类不够‘智能’,无法直接提供对基础字符串的访问,因此我相信您必须自己解开它。

这篇关于Rcp并行:将CharacterMatrix转换为RMatrix&amp;lt;T&amp;gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆