我想使用这个函数(或者只是它返回的String):
const char* ERROR_TYPE() {
return "unknown type detected for big.matrix object!";
}
在我的R(cpp)包中。
我想让它可用于我所有的Rcpp函数(src /中的文件)和我的所有测试(test / 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(无法找到该功能),因此它也不是解决方案。
答案 0 :(得分:0)
使用 List<String> myList = new ArrayList<String>();
myList.add("xyz");
testng.setTestClasses(classes);
testng.setTestNames(myList);
testng.run();
:
inst/include/utils.h
在所有需要它的Rcpp文件中包含此标题
创建一个返回此错误消息的Rcpp函数:
#ifndef UTILS_H
#define UTILS_H
const char* const ERROR_TYPE = "unknown type detected for big.matrix object!";
#endif // UTILS_H
#include <bigstatsr/utils.h>
// [[Rcpp::export]]
const char* const GET_ERROR_TYPE() {
return ERROR_TYPE;
}