имеют в своих данных значение, эквивалентное исключению, поэтому у вас возникнет проблема, независимо от того, неправильно ли вы отклонили значение, которое ложно казалось эквивалентным ограничению, только из-за точности чисел или если вы правильно его сохранили, но из того, что вы можете измерить, у вас будет невозможное значение в ваших данных. Это кажется маловероятной проблемой, но ее невозможно решить удовлетворительно, если она появится.
я хочу сгенерировать случайное число сrunif()
в пределах определенного интервала при исключении определенного значения (например, 0,5) я могу написать эту функциюex.runif()
кто делает работу, но это в сотни раз медленнее, чем обычноrunif()
, Может ли кто-нибудь указать мне на лучшее решение?
ex.runif <- function(n, excl, min, max) {
# ex.runif() excludes the specific value 'excl'
q <- excl
while (q == excl) {
q <- runif(n, min = min, max = max)
}
return(q)
}
set.seed(42)
ex.runif(1, .5, .25, .75) # exclude .5, interval [.25, .75]
# [1] 0.707403
library(microbenchmark)
microbenchmark(ex.runif(1, .5, .25, .75), runif(1, min = .25, max = .75))
# Unit: microseconds
# expr min lq mean median uq max neval cld
# ex.runif 692.439 704.685 721.51135 715.2735 722.9275 962.373 100 b
# runif 2.041 2.551 3.49044 2.8070 3.3170 21.176 100 a