2014-10-22 2 views
0

я написал функциюR: как написать функцию, что образцы заданной вероятности

p = c(0.4, 0.6) 
myfun = function(p){ 
    sample(1:2, 1, replace = TRUE, prob = p) 
} 

И я хочу повторить это 5 раз.

sapply(1:5, myfun) 

Но это дает мне ошибку

Ошибка в sample.int (длина (х), размер, замена проб): неправильное количество вероятностей

+0

Возможно, вы хотите попробовать образец 1: 2? В противном случае проблема должна быть длиной 10 ... – EDi

+0

Ах да. Сожалею. Я хочу попробовать с 1: 2, но я все равно получаю ту же ошибку. – Adrian

+2

'replicate (5, sample (2, replace = TRUE, prob = c (0.4, 0.6)))' –

ответ

0

Вы могли бы напишите вашу функцию replicate.

myfun <- function(x, p, n, replace = TRUE) { 
    m <- replicate(n, sample(x, replace = replace, prob = p)) 
    if(n == 1) c(m) else m 
} 
myfun(2, c(0.4, 0.6), 5) 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 1 1 2 2 2 
# [2,] 2 2 2 1 2 
myfun(2, c(0.4, 0.6), 1) 
# [1] 2 1 
0

Вы можете использовать функцию sample для выбора 5 значений.

p <- c(0.4, 0.6) 
sample(1:2, 5, replace = TRUE, prob = p) 
# [1] 2 2 2 2 1