2015-03-09 4 views
4

Я пытаюсь создать вектор в R с помощью rep() функциинеожиданное поведение репутации() в R

p <- .9 
n <- 100 
rep(8,n*(1-p)^2) # expect 8 

Что вызывает неожиданное поведение?

+1

@Frank - yep, 'as.integer (n * (1-p)^2)' возвращает '0' - как и' as.integer (0.99999) ' – thelatemail

+4

это в основном FAQ 7.31, например. http://stackoverflow.com/questions/26296576/r-generates-fewer-random-numbers-than-specified-with-rnorm-rexp-rpois-and-runi/26297615#26297615 –

+1

@Dave 'same (n * (1-p)^2,1) 'ложно, как и' n * (1-p)^2 == 1'. R не сохраняет точно такие числа. – Frank

ответ

0

Причина этого в комментарии к вопросу. Обходной путь использует:

rep(8, round(n*(1-p)^2)) 
0

Сжатие комментариев. Второй аргумент rep должен быть целым числом. На странице справки: ?as.integer мы знаем, что реальные числа усекаются к нулю. Так

n*(1-p)^2 

передается

as.integer(n*(1-p)^2) 

, равной 0.

Смежные вопросы