2016-03-01 56 views
1

一些調試後,我已經縮小問題到以下幾點:爲什麼rbinom在R中給我nas?

minc <- function(split, population, base, lift = 0.1) { 
     control.pop <- population * (1- split) 
     test.pop <- population*split 

     control.cr <- base 
     test.cr <- control.cr*(1+lift) 

     #### print statements #### 
     print(c(control.pop, control.cr)) # print values of variables 
     print(rbinom(1, 5800.0 , 0.1)) # print rbinom for the values 
     print(rbinom(1, control.pop, control.cr)) # print rbinom for the variables 
    } 


    minc(0.8, population = 29000, base = 0.1, lift = 0.1) 

這給輸出

[1] 5800.0 0.1 
[1] 589 
[1] NA 

也就是說, 我打印的傳遞的變量的值,並然後rbinom爲這些值 - 它工作正常 - 但是當我做變量的rbinom我得到NA。這裏發生了什麼事?

回答

1

Rbinom希望的大小的整數,你可以做

control.pop <- as.integer(population * (1 - split)

正如@奔bolker指出使用round將輪的整數,而不是僅僅截斷:

control.pop <- round(population * (1 - split))

+0

或者可能是'round(population *(1-split))'('as.integer()'截斷) –

+0

同意我會在解決方案中添加round。問題本身與R處理計算的方式有關。例如: 'control.pop < - population * .2' 正常工作。 但這會引發錯誤 'control.pop < - population *(1 - .8)' –

+0

Thanks!不想承認我在這花了多少時間:P –