我正在尝试使用 C++ 构建一个 R 包,而不使用 Rcpp(我知道 Rcpp 工作得很好)。我已经阅读了几个 R 包教程并简要阅读了编写 R 扩展。下面的示例 1) 正在工作,但示例 2) 使 R 崩溃。我想知道为什么会发生这种情况(是否有任何先决步骤可以为 R 等编写函数?)。
在.cpp文件中
extern "C" {
SEXP add(SEXP a, SEXP b) {
SEXP result = PROTECT(allocVector(REALSXP, 1));
REAL(result)[0] = asReal(a) + asReal(b);
UNPROTECT(1);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
调用 R:
.Call("add", 3.0, 2.0).
Run Code Online (Sandbox Code Playgroud)
这个例子有效。
在.cpp文件中:
extern "C" {
void RHello() {
Rprintf("Hello.\n");
R_FlushConsole();
R_ProcessEvents();
}
}
Run Code Online (Sandbox Code Playgroud)
调用 R:
.Call("RHello").
Run Code Online (Sandbox Code Playgroud)
这会导致 R 崩溃。