我有以下文件cumsum_bounded.cpp
#include <Rcpp.h>
using namespace Rcpp;
//' Cumulative sum.
//' @param x numeric vector
//' @param low lower bound
//' @param high upper bound
//' @param res bounded numeric vector
//' @export
//' @return bounded numeric vector
// [[Rcpp::export]]
NumericVector cumsum_bounded(NumericVector x, double low, double high) {
NumericVector res(x.size());
double acc = 0;
for (int i=0; i < x.size(); ++i) {
acc += x[i];
if (acc < low) acc = low;
else if (acc > high) acc = high;
res[i] = acc;
}
return res;
}
然后我建立&amp;重新加载并测试我的新功能。
cumsum_bounded(c(1, -2, 3), low = 2, high = 10)
[1] 1 0 3
然后我构建文档。
devtools::document()
当我Build & Reload
时,一切都很好。
但是当我运行cumsum_bounded(c(1, 2, 3), low= 2, high = 10)
时,我收到错误:
Error in .Call("joshr_cumsum_bounded", PACKAGE = "joshr", x, low, high) :
"joshr_cumsum_bounded" not available for .Call() for package "joshr"
NAMESPACE
# Generated by roxygen2: do not edit by hand
export(cumsum_bounded)
更新
如果我按上面创建一个新项目并且不使用Build & Reload
函数,而是使用devtools :: loadall(),它将起作用。但是,一旦我按下Build & Reload
按钮,它就会横向移动。
答案 0 :(得分:11)
你可能需要这一行
useDynLib(<pkg>) ## substitute your package name for <pkg>
在您的NAMESPACE文件中。如果您正在使用roxygen2,则可以添加一行,例如#' @useDynLib <pkg>
在您的文档中的某个位置,根据需要用您的包名替换<pkg>
。
编辑:为了回应您的其他错误消息,您可能需要从Rcpp导入一些内容,例如:添加第@importFrom Rcpp evalCpp
行。