RedHat で R 2.15.2 と Rcpp 10.4 (数日前にアップグレード) を実行しています。
make によってコンパイルされた C++ プログラムで qgamma 関数を呼び出すと、0 が返されますが、同じプログラムの qnorm は正しい値を返します (ソースを参照してください)。cppFunction コンパイルを介して呼び出すと、正しい答えが得られます。
C++ ソース:
#include <iostream>
using namespace std;
#include <Rcpp.h>
int main() {
cout << R::qnorm(0.3, 1.0, 1.0, 1, 0) << endl;
cout << R::qgamma(0.3, 5.0, 5.0, 1, 0) << endl;
return 0;
}
および関連するコンパイル メッセージと実行:
[jbowma1@smartrepl-app00 src]$ make test
g++ -I/usr/include/R -I/usr/lib64/R/library/Rcpp/include -L/usr/lib64/R/lib -lR -L/usr/lib64/R/library/Rcpp/lib -lRcpp -Wl,-rpath,/usr/lib64/R/library/Rcpp/lib -o test test.cpp
[jbowma1@smartrepl-app00 src]$ ./test
0.475599
0
[jbowma1@smartrepl-app00 src]$
もちろん問題は、上記の出力の 2 行目に「0」が出力されていることです。
cppFunction バージョンの場合:
> foosrc <- "double foo() {return R::qgamma(0.3, 5.0, 5.0, 1, 0);}"
> bar <- cppFunction(foosrc)
> bar()
[1] 18.16805
(同じコンピューター、当然、これは RStudio で実行されます。)
R プロンプトから呼び出すだけqgamma
の場合、同じ答えを得るには、3 番目のパラメーターを反転する必要があることに注意してください (この例では =0.2)。
実際に RcppExamples ディレクトリから大部分がコピーされているメイクファイルを台無しにしてしまったのではないかと思いqnorm
ます。 dgamma
も機能しますが、pgamma
機能しません。負の二項分布など、他の分布も機能します。
どんな提案でも大歓迎です!