将dnorm和pnorm函数从R导入Rcpp时出现问题
Issue importing dnorm and pnorm functions from R to Rcpp
当我试图将dnorm()
和pnorm()
函数从R包stats
导入Rcpp时,遇到了以下奇怪的行为。我将平均值为0、标准偏差为1的dnorm()
和pnorm()
应用于观测向量。如果我在同一个向量上重复计算几次,有时会得到不同的结果。看起来我在导入这两个函数时做错了什么,但这并不能解释为什么结果有时是好的,有时是不一致的。
我在这里放了从stats
:导入dnorm()
和pnorm()
函数的函数
{test_imp_script<-'
using Eigen::VectorXd;
VectorXd a = Rcpp::as<VectorXd>(aa);
Environment st("package:stats");
Function dn = st["dnorm"];
Function pn = st["pnorm"];
SEXP dd_a = dn(a,0,1);
SEXP pp_a = pn(a,0,1);
VectorXd d_a = as<VectorXd>(dd_a);
VectorXd p_a = as<VectorXd>(pp_a);
return List::create(Named("d") = d_a,Named("p") = p_a);'}
test_imp <- cxxfunction(signature( aa="numeric"), test_imp_script, plugin = "RcppEigen")
现在,尝试运行下面的例子,重复2000次test_imp
。
set.seed(123)
t<-rnorm(1000,0,1)
a<-test_imp(t)
for (i in 1:2000){
set.seed(123)
b<-test_imp(t)
cat(i,"d",c(sum(b$d),sum(b$p)),"n")
if (any(a$d!=b$d)) break
if (any(a$p!=b$p)) break
}
有时,实验在循环结束之前就中断了。有时情况并非如此。没有明确的模式。
感谢您的回复。
OMG这些已经可用。
首先,通过糖:
R> library(Rcpp)
R> cppFunction("NumericVector ex1() { return rnorm(5, 0, 1); }")
R> set.seed(42); ex1()
[1] 1.370958 -0.564698 0.363128 0.632863 0.404268
R>
其次,通过一个方便的名称空间(但请注意,这不是矢量化的)
R> cppFunction("double ex2() { return R::rnorm(0, 1); }")
R> set.seed(42); ex2()
[1] 1.37096
R>
第三,如果你坚持,直接调用R API,这是以前的答案越少,但更丑:
R> cppFunction("double ex3() { return Rf_rnorm(0, 1); }")
R> set.seed(42); ex3()
[1] 1.37096
R>
我们已经尽力提供免费和全面的文件。我真的不认为你看过。这样做对你有利,因为你不再依赖别人在这里为你重新打字。
(是的,您确实要求dnorm
和pnorm
,但所有用于统计分布的所谓d/p/q/r函数都是并行实现的。因此,在存在rnorm
的情况下,您也有dnorm
、qnorm
和pnorm
,当然有不同的参数。)
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 在 Rcpp-Function 中使用布尔向量的子集(Rcpp 初学者的问题..)
- Rcpp中的if-else语句出现问题
- 在 Rcpp 中使用 Eigen c++ 库用于 Galerkin 矩阵时出现问题
- RCPP 第一次编译问题
- 将dnorm和pnorm函数从R导入Rcpp时出现问题
- Rcpp、C++11、矢量和Windows的问题