没有参数的 Rcpp 函数

Rcpp function with no argument

我正在使用 Rcpp 开发 R 包,现在我试图包含以下没有输入参数的 c++ 函数:

int printVariables() {
    // Code
    return 0;
}

我的RcppExports.cpp下一个函数:

int printVariables();
RcppExport SEXP printVariables() {
BEGIN_RCPP
    Rcpp::RObject __result;
    Rcpp::RNGScope __rngScope;
    __result = Rcpp::wrap(printVariables());
    return __result;
END_RCPP
}

最后,在 RcppExports.R 我有一个条目如下:

printVariables <- function() {
    .Call('printVariables', PACKAGE = 'my_package')
}

当我编译代码时出现此错误:

RcppExports.cpp: In function ‘SEXPREC* printVariables()’:
RcppExports.cpp:54:37: error: ambiguating new declaration of ‘SEXPREC* printVariables()’
 RcppExport SEXP printVariables() {
RcppExports.cpp:53:5: note: old declaration ‘int printVariables()’
 int printVariables();

有人知道我该如何解决这个问题吗?

只需在此处放置一个被忽略的参数即可。 Return 类型 void 有效,但你 必须 至少有一个你可以随意忽略的参数。

R> cppFunction("void foo(int ignored=0) { double d; }")
R> foo()
R> 

查看 Rcpp Attributes vignette 了解所有精彩细节。

编辑 我确实得到了纠正,感谢@hrbrmstr,他正确地指出这个当然在一个包中工作。 IE。即使是 RStudio 创建的示例函数,当被要求执行文件 -> 新项目 -> 新目录 -> R 包时,当 'Package w/ Rcpp' 为 select 时,也有这样的:

// [[Rcpp::export]]
List rcpp_hello() {
  CharacterVector x = CharacterVector::create("foo", "bar");
  NumericVector y   = NumericVector::create(0.0, 1.0);
  List z            = List::create(x, y);
  return z;
}

这显然是 sans 论点。