2014-03-13 34 views
0

我想在R中創建一個組合函數,它取決於我設置變量的數字。這告訴我,我將不得不使用循環。下面是我想創建公式的例子,我填寫的例子給出的數字:根據在r中創建一個組合循環

公式的變化放在對於b什麼號碼,如果。我猜我會需要一個總和和一個循環。

comb = function(n, x) {return(factorial(n)/(factorial(x) * factorial(n-x)))} 


a <- 8 
b <- 4 
c <- 0:b 
p <- 0.05 

total = function(n) { 
    return(((comb(a,b + c)*comb((n-a), (c - b)*(-1))/comb(n,a) - 0.05) 
} 

我會再找出n等於也通過將其設定爲0。

回答

2

你並不需要定義comb - 這是由函數choose在基地R.我提供想你所需要的是結合choosesum來計算你的分子:

total <- function(n) { 
    sum(choose(a, b:(2*b)) * choose(n-a, b:0))/choose(n, a) - p 
} 

# Plot total(n) for various n values: 
a <- 8 
b <- 4 
p <- 0.05 
n <- 20:100 
plot(n, sapply(n, total)) 

enter image description here

對於這些參數,total(n)在n = 36和n = 37之間穿過0。

+0

太棒了!爲了找到最接近的時候等於0我用這個: x = 0 w < - sapply(n,total) n [which.min(abs(w-x))] 是否有更快,更好的方法? – itjcms18

+0

@ user2989523,看起來像一個很好的方式來做到這一點。 – josliber