Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ RcppParallel:将CharacterMatrix转换为RMatrix<;T>;_C++_R_Rcpp - Fatal编程技术网

C++ RcppParallel:将CharacterMatrix转换为RMatrix<;T>;

C++ RcppParallel:将CharacterMatrix转换为RMatrix<;T>;,c++,r,rcpp,C++,R,Rcpp,你好,亲爱的社区 我正在学习RcppParallel,在尝试使用以下代码将Rcpp::CharacterMatrix转换为RcppParallel::RMatrix时遇到了这个问题: struct CharMatDist : RcppParallel::Worker { const RcppParallel::RMatrix<std::string> A; const RcppParallel::RMatrix<std::string> B;

你好,亲爱的社区

我正在学习RcppParallel,在尝试使用以下代码将Rcpp::CharacterMatrix转换为RcppParallel::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();
    }

...

}
struct CharMatDist:RcppParallel::Worker{
常量RcppParallel::RMatrix A;
常量RcppParallel::RMatrix B;
常数数值向量w;
RcppParallel::RMatrix 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
无法在初始化中将“Rcpp:Matrix::iterator(也称为Rcpp::internal::Proxy_iterator)”转换为“char*”
我也试过了

RMatrix<char>
RMatrix
而即使是手工铸造在身上也没有成功。我哪里做错了

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


YYA

这里的问题是
CharacterVector
CharacterMatrix
类型实际上只是
SEXP
s的向量——更具体地说,
CharacterVector
包装
STRSXP
,其内容是
SEXP
的数组(运行时类型
CHARSXP
)。不幸的是,当与R的角色类型交互时,了解这些细节是必要的

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


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

您可以包含其余代码吗(
)?其余部分应该分别计算A和B中每对行之间的距离度量,我仍在处理这些度量。根据我的测试,现有代码已经足以完全产生错误。;)谢谢你,凯文。在尝试了你的建议和更多的可能性之后,比如使用迭代器访问RMatrix(,实际上是有效的),我仍然无法从CharacterVector或-Matrix转换一个。所以我决定简单地用数字编码字符。也许我们可以期待更新的改进>中的一个重要注意事项是,我们使用RMatrix类型访问矩阵。这是因为此代码将在调用R或Rcpp API不安全的后台线程上执行。RcppParallel包中包含RMatrix类,它提供了一个轻量级的线程安全包装器,用于包装R矩阵。