如何从 Rcpp 代码中的 R 包创建 S4 类 的实例
How to create instances of S4 classes from R packages in Rcpp code
我正在尝试从 Rcpp 代码中创建 sparseMatrix 实例的 Rcpp。
我了解,为了创建 S4 对象,我们使用所需 class 的名称作为字符串调用 S4 构造函数,例如:
S4 foo() {
S4 s("dgCMatrix");
return s;
}
但在我的例子中这失败了
Error in getClass("dgCMatrix") : “dgCMatrix” is not a defined class
我猜这是因为矩阵包还没有加载?我试过添加
// [[Rcpp::depends(Matrix)]]
以及包说明中 Matrix 的 Imports 和 LinkingTo 指令,但我仍然遇到相同的错误。如何从 Rcpp 中的 R classes 创建实例?
更新:如果不加载 Matrix,则需要在命名空间中导入以下 coatless' 、classes:
//' @importClassesFrom Matrix dgCMatrix
// [[Rcpp::export]]
S4 foo() {
S4 s("dgCMatrix");
return s;
}
在您使用 Roxygen2 管理命名空间的情况下处理它。
您 运行 遇到的问题是 Matrix
包尚未加载。因此,当 Rcpp 搜索 dgCMatrix ctor 时,它出现为空,因此触发了您看到的错误。为了解决这个问题,您可以在每个会话开始时简单地加载一次 Matrix
库。例如
library("Matrix")
sourceCpp("path/to/S4_declaration.cpp")
或者,您可以在您正在执行的 sourceCpp
编译中添加加载调用。这有点极端,因为您只需要加载一次库。
尽管如此,以下内容应该始终在 sourceCpp()
下工作
#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::S4 make_dgCMatrix() {
Rcpp::S4 s("dgCMatrix");
return s;
}
/*** R
library("Matrix")
make_dgCMatrix()
*/
当你将它移动到 R 包中时,确保你在 DESCRIPTION
中导入 Matrix
包
Imports:
Matrix
并在 NAMESPACE
中导入 dgCMatrix
定义。
importClassesFrom(Matrix, dgCMatrix)
我正在尝试从 Rcpp 代码中创建 sparseMatrix 实例的 Rcpp。
我了解,为了创建 S4 对象,我们使用所需 class 的名称作为字符串调用 S4 构造函数,例如:
S4 foo() {
S4 s("dgCMatrix");
return s;
}
但在我的例子中这失败了
Error in getClass("dgCMatrix") : “dgCMatrix” is not a defined class
我猜这是因为矩阵包还没有加载?我试过添加
// [[Rcpp::depends(Matrix)]]
以及包说明中 Matrix 的 Imports 和 LinkingTo 指令,但我仍然遇到相同的错误。如何从 Rcpp 中的 R classes 创建实例?
更新:如果不加载 Matrix,则需要在命名空间中导入以下 coatless'
//' @importClassesFrom Matrix dgCMatrix
// [[Rcpp::export]]
S4 foo() {
S4 s("dgCMatrix");
return s;
}
在您使用 Roxygen2 管理命名空间的情况下处理它。
您 运行 遇到的问题是 Matrix
包尚未加载。因此,当 Rcpp 搜索 dgCMatrix ctor 时,它出现为空,因此触发了您看到的错误。为了解决这个问题,您可以在每个会话开始时简单地加载一次 Matrix
库。例如
library("Matrix")
sourceCpp("path/to/S4_declaration.cpp")
或者,您可以在您正在执行的 sourceCpp
编译中添加加载调用。这有点极端,因为您只需要加载一次库。
尽管如此,以下内容应该始终在 sourceCpp()
#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::S4 make_dgCMatrix() {
Rcpp::S4 s("dgCMatrix");
return s;
}
/*** R
library("Matrix")
make_dgCMatrix()
*/
当你将它移动到 R 包中时,确保你在 DESCRIPTION
Matrix
包
Imports:
Matrix
并在 NAMESPACE
中导入 dgCMatrix
定义。
importClassesFrom(Matrix, dgCMatrix)