私は、整数kの確率を計算するR関数を持っています。 k = 1、...、mとなる。 kのサイズが非常に大きい場合(例えば、m = 10,000)、関数は非常に遅い。関数のパフォーマンスを改善するための提案はありますか?Rのパフォーマンスを向上させたり、R関数をC++関数に変換したりする
RからのRCPPパッケージを使用できるように、必要に応じてC++で同等の関数を作成したいが、C++についてはわからない。 C++を最初から学ぶ前に、私はあなたの提案もしたいと思います。
prob <- function(k, et, ey, nrep = 10000, m0, m1)
{
m = m0 + m1
t <- rnorm(nrep, et, 1)
p0 <- pnorm(-t)
p1 <- pnorm(ey - t)
mean0 <- (m0 - 1)*p0 + m1*p1 + 1
mean1 <- m0*p0 + (m1 - 1)*p1 + 1
var0 <- (m0 - 1)*p0*(1 - p0) + m1*p1*(1 - p1)
var1 <- m0*p0*(1 - p0) + (m1 - 1)*p1*(1 - p1)
prob <- ifelse(et == 0, mean(dnorm(k, mean0, sqrt(var0))),
mean(dnorm(k, mean1, sqrt(var1))))
return(prob)
}
dnorm
がベクトル化機能であるので、あなただけのverctorized出力を取得するにはprob
prob_k <- prob(1:10000, et = 1, ey = 1 ,m0 = 5000, m1 = 5000)
のように呼び出すことができ、あなたがのコードを変更する必要があります機能
prob_k <- sapply(1:10000, prob, et=1, ey=1 ,m0 = 5000, m1 = 5000)
あなたの関数にフィードするつもりだデータのですか?キーはゼロからベクトル化することです.C++でのコーディングは最後の手段です。 –