【发布时间】:2016-09-15 21:35:52
【问题描述】:
我想使用这个函数(或者只是它返回的字符串):
const char* ERROR_TYPE() {
return "unknown type detected for big.matrix object!";
}
在我的 R(cpp) 包中。
我想让我的所有 Rcpp 函数(src/ 中的文件)和我的所有测试(tests/testthat/ 中的 R 文件)都可以使用它。
换句话说,我想使用throw Rcpp::exception(MESSAGE); 和testthat::expect_error(foo(), MESSAGE),其中MESSAGE 被定义一次。
我尝试阅读和测试Rcpp Attributes 中所说的一些内容,但它似乎不适用于我的问题。
我尝试的第一件事是定义
// [[Rcpp::export]]
const char* ERROR_TYPE() {
return "unknown type detected for big.matrix object!";
}
但它不适用于其他 Rcpp 文件。
然后,我尝试在其他 Rcpp 文件中使用 #include "myfile.cpp",但我有多个定义,即使尝试使用 inline 或 #ifndef #define #endif 但我认为这对于 C++ 文件来说很奇怪。
最后,我尝试使用inst/include/mypackage.h 并在那里定义我的函数或变量,但它似乎也不适用于其他 C++ 函数。
一个技巧似乎奏效了,定义一个 R 函数
ERROR_TYPE <- function() {
"unknown type detected for big.matrix object!"
}
然后使用
Function err("ERROR_TYPE");
throw Rcpp::exception(as<const char*>(err()));
在您的 Rcpp 函数中。
不过,这似乎不是一个好习惯。
而且,它适用于 devtools::test(),但不适用于 devtools::check() 或 Travis-CI(找不到该函数),因此它也不是解决方案。
【问题讨论】:
-
到目前为止,您到底尝试了什么?你在 GitHub 上看过RcppExamples 包及其源代码吗?
-
我已经编辑了我的帖子,添加到行下方。
-
不,我想要一个字符串(错误消息)可用于我的 Rcpp 函数和我的 R 函数(尤其是我的测试)。