-1
我在Rcpp
声明如下功能:错误建筑包装
#include <Rcpp.h>
// [[Rcpp::depends(RcppArmadillo)]]
#include <Rmath.h>
using namespace Rcpp;
// [[Rcpp::export]]
double loglikZeta(double zold, double zstar, NumericVector y, int K, double p){
NumericVector num = Rcpp::dbinom(y,K,p*zstar);
NumericVector den = Rcpp::dbinom(y,K,p*zold);
return (num[0]/den[0]);
}
// [[Rcpp::export]]
double singleZetaSampler(NumericVector z, NumericVector y,
double p, int K, int i, double zstar){
return loglikZeta(z[i-1],zstar,y[i-1],K,p);
}
现在宣布(已装包和文件后):
z <- y <- c(rep(1,20),rep(0,20))
n <- length(y)
K <- 3
p <- 0.5
i <- 30
zstar <- 1
意外的行为是,如果我尝试打电话给我每次都有不同的结果(功能中没有任何随机):
singleZetaSampler(z,y,p,K,i,zstar)
[1] 1.000051
singleZetaSampler(z,y,p,K,i,zstar)
[1] 0.1887447
singleZetaSampler(z,y,p,K,i,zstar)
[1] 0.9999998
我在这里做了什么大错误,或者这些结果实际上是意外的?
编辑:
很抱歉,如果函数不使用,因为它是感觉。这是原来的功能:
// [[Rcpp::export]]
NumericVector zetaSampler(int n, NumericVector z, NumericVector y,
double p, int K){
NumericVector xx(n);
for(int i = 0; i < n; i++){
xx(i) = loglikZeta(z[i],1,y[i],K,p);
}
return xx;
}
,并呼吁:
zetaSampler(length(z),z,y,p,K)
每次像以前那样给出不同的结果。
对不起,我不明白为什么我不应该设置'我= 30' – adaien
我的错误。急于离开办公室。向量确实是长度为40.不明白为什么你会得到不同的结果。 –
不用担心,无论如何,谢谢。我只是希望这不是一个错误 – adaien