gpt4 book ai didi

Rcpp:错误:与请求的类型不兼容

转载 作者:行者123 更新时间:2023-12-04 21:14:53 26 4
gpt4 key购买 nike

我有这个 C++ 代码:

#include <R.h>
#include <Rcpp.h>
using namespace Rcpp;
extern "C" {
SEXP gensampleRcpp2( Function rlawfunc, SEXP n) {
Rcpp::RNGScope __rngScope;
return Rcpp::List::create(Rcpp::Named("sample") = rlawfunc(n),
Rcpp::Named("law.name") = " ",
Rcpp::Named("law.pars") = R_NilValue);
}

RcppExport SEXP gensampleRcpp(SEXP rlawfuncSEXP, SEXP nSEXP) {
BEGIN_RCPP
Function rlawfunc = Rcpp::as<Function >(rlawfuncSEXP);
IntegerVector n = Rcpp::as<IntegerVector >(nSEXP);
SEXP __result = gensampleRcpp2(rlawfunc, n);
return Rcpp::wrap(__result);
END_RCPP
}

SEXP compquantRcpp2(IntegerVector n, IntegerVector M, Function Rlaw) {
int i;
GetRNGstate();
for (i=1;i<=M[0];i++) {
List resultsample = gensampleRcpp2(Rlaw, n);
NumericVector mysample = Rcpp::as<NumericVector >(resultsample["sample"]);
}
PutRNGstate();
return Rcpp::List::create(Rcpp::Named("law.pars") = "");
}

RcppExport SEXP compquantRcpp(SEXP nSEXP, SEXP MSEXP, SEXP RlawSEXP) {
BEGIN_RCPP
IntegerVector n = Rcpp::as<IntegerVector >(nSEXP);
IntegerVector M = Rcpp::as<IntegerVector >(MSEXP);
Function Rlaw = Rcpp::as<Function >(RlawSEXP);
SEXP __result = compquantRcpp2(n, M, Rlaw);
return Rcpp::wrap(__result);
END_RCPP
}
}

和这个R代码:
compquant <- function(n=50,M=10^3,Rlaw=rnorm) {
out <- .Call("compquantRcpp",n=as.integer(n),M=as.integer(M),as.function(Rlaw),PACKAGE="PoweR")
return(out)
}

在一个名为 PoweR 的包中(实际上上面的代码是我自己代码的简化,所以不要试图理解它的目的)。当我编译我的包(在 Linux 和 R 版本 3.1.0 下)并在控制台中发出以下 R 命令时:
require(PoweR)
compquant()

我收到以下错误:
错误:与请求的类型不兼容

您对可能是什么问题以及如何解决它有任何想法吗?

谢谢你。

最佳答案

我只需要删除第 6 行:
Rcpp::RNGScope __rngScope;
来解决问题。话虽如此,Dirk Eddelbuettel 就 rcpp-devel 如何大大简化整个过程给出了很好的提示。非常感谢德克。

关于Rcpp:错误:与请求的类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26181068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com