Я пытаюсь создать вектор в R с помощью rep()
функциинеожиданное поведение репутации() в R
p <- .9
n <- 100
rep(8,n*(1-p)^2) # expect 8
Что вызывает неожиданное поведение?
Я пытаюсь создать вектор в R с помощью rep()
функциинеожиданное поведение репутации() в R
p <- .9
n <- 100
rep(8,n*(1-p)^2) # expect 8
Что вызывает неожиданное поведение?
Причина этого в комментарии к вопросу. Обходной путь использует:
rep(8, round(n*(1-p)^2))
Сжатие комментариев. Второй аргумент rep
должен быть целым числом. На странице справки: ?as.integer
мы знаем, что реальные числа усекаются к нулю. Так
n*(1-p)^2
передается
as.integer(n*(1-p)^2)
, равной 0
.
@Frank - yep, 'as.integer (n * (1-p)^2)' возвращает '0' - как и' as.integer (0.99999) ' – thelatemail
это в основном FAQ 7.31, например. http://stackoverflow.com/questions/26296576/r-generates-fewer-random-numbers-than-specified-with-rnorm-rexp-rpois-and-runi/26297615#26297615 –
@Dave 'same (n * (1-p)^2,1) 'ложно, как и' n * (1-p)^2 == 1'. R не сохраняет точно такие числа. – Frank