【发布时间】:2017-06-15 06:31:34
【问题描述】:
Rcpp 试图从 Rcpp 代码中创建一个 sparseMatrix 的实例,这让我大吃一惊。
我知道为了创建 S4 对象,我们使用所需类的名称作为字符串调用 S4 构造函数,例如:
S4 foo() {
S4 s("dgCMatrix");
return s;
}
但在我的情况下,这失败了
Error in getClass("dgCMatrix") : “dgCMatrix” is not a defined class
我认为这是因为尚未加载 Matrix 包?我已经尝试添加
// [[Rcpp::depends(Matrix)]]
以及包说明中 Matrix 的 Imports 和 LinkingTo 指令,但我仍然遇到相同的错误。如何在 Rcpp 中从 R 类创建实例?
更新:在coatless'answer之后,如果不加载Matrix,则需要在命名空间中导入类:
//' @importClassesFrom Matrix dgCMatrix
// [[Rcpp::export]]
S4 foo() {
S4 s("dgCMatrix");
return s;
}
如果您使用 Roxygen2 来管理命名空间,请注意它。
【问题讨论】:
-
嗯?这个表达式应该代表什么:
S4 s("dgCMatrix")...需要更多代码。 -
你没有在那里调用构造函数
Matrix。从 Rcpp 调用此 R 函数或在 C++ 中创建自己的构造函数。或者使用 Armadillo 的稀疏矩阵类。 -
Rcpp Gallerty 上有 有 个示例例如。
-
@42- 它应该是一个 c++ 构造函数。
-
@Roland 我不明白。什么构造函数?你是说R的吗?您的意思是从 C++ 中将 R 构造函数调用为 Function 对象?我直接从此处提供的示例中提取那行代码:gallery.rcpp.org/articles/as-and-wrap-for-sparse-matrices