2017-08-09 5 views
0

私はRRというR関数を持っています。あなたが関数のパラメータと同じ名前を持つ関数のデフォルトを定義するときRで `replicate()`を使う関数でエラーを修正しましたか?

Error in rbinom(1, size = n, prob = p) : promise already under evaluation: recursive default argument reference or earlier problems?

RR = function(n, p, n.sim){ 

fun <- function(n = n, p = p){ 
    x <- rbinom(1, size = n, prob = p) 
res <- binom.test(x, n, p)[[4]] 
c(Lower = res[1], Upper = res[2]) 
} 

sim <- t(replicate(n.sim, fun())) 

mean(sim[,1] <= p & p<= sim[,2]) 

} 
# Example of use: 
RR(n = 15, p = .5, n.sim = 5) 
+0

変数にはある種のレキシカルスコープの問題があると思います。 – Kevin

答えて

0

Rは、このエラーメッセージをスローし、その関数を呼び出す:私は次のエラーを修正する方法を思ったんだけど同一のパラメータ名を持つ別の関数内から呼び出すことができます。だからfunction(x = x)は一般的には良い考えではありません。あなたが楽しみをちょうど fun <- function(n2 = n, p2 = p)に変更すると、コードは問題なく実行されます。

なぜこのようなことが起こったのかは完全にわかりませんが、避けるのは簡単です。

関連する問題