-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