【发布时间】:2019-02-19 17:26:34
【问题描述】:
以下 Rcpp 代码是生成相同编译错误的更大代码的最小可重现示例。似乎我无法将数字矩阵分配给列表,然后再将列表分配给另一个矩阵。
#include <Rcpp.h>
using namespace Rcpp;
//[[Rcpp::export]]
List return_a(NumericMatrix a, NumericMatrix b){
//the function only returns the input matrix a
List result(1);
result(0) = a;
return(result);
}
//[[Rcpp::export]]
List wrapper_cpp(NumericMatrix a, NumericMatrix b){
//the function is a dummy wrapper for much more code
List Step1(1);
List results(1);
Step1 = return_a(a,b);
a = Step1(0);
results(0) = a;
return(results);
}
上面的代码给出了我缩短的以下编译错误:
error: ambiguous overload for 'operator=' (operand types are 'Rcpp::NumericMatrix {aka Rcpp::Matrix<14>}' and 'Rcpp::Vector<19>::Proxy ...
a = Step1(0);
我的实际功能要复杂得多。我需要在几个循环中操作矩阵,并且在每个步骤中,矩阵由列表中的每个函数返回。然后我需要提取这些列表以进一步操作矩阵。如何才能做到这一点?
【问题讨论】:
-
在
result_a变量result尚未声明。 -
尽量不要为您提供的参数分配任何内容。我不知道为什么会这样,但这个技巧通常会有所帮助。只要确保您定义一个新的数字矩阵,例如
NumericMatrix c = Step1(0); results(0) = c;就可以了 -
是的,这也是我在下面的回答(在您的评论之前发布)所做的。
标签: c++ r compiler-errors rcpp