2015-10-13 3 views
1

В настоящее время я работаю над проблемой домашних заданий и столкнулся с проблемой. Проблема, над которой я работаю, - это модифицированная версия классической проблемы с днем ​​рождения. Тем не менее, я также пытаюсь сейчас не просто выяснить вероятность того, что у двух людей будет тот же день рождения, но, более конкретно, вероятность того, что у кого-то будет такой же день рождения, как и я.Найти индекс специфической ценности в R

Ниже приведены рабочие функции для существующей проблемы с днем ​​рождения для задания.

birthdays = function(n) { 
s = sample(1:365, n, replace = TRUE) 
return(s) 
} 

duplicate.birthdays = function(n) { 
b = birthdays(n) 
dups = anyDuplicated(b) 
dups = any(dups>0) 
return(dups) 
} 

prob.duplicate =function(n) { 
r = replicate(5000, duplicate.birthdays(n)) 
prob = sum(r)/length(r) 
return(prob) 
} 

n = 1:100  # number of people I'm sampling from 
probs = sapply(n, prob.duplicate) 

Я попытался изменить эти функции, чтобы специально настроить цель, если у кого-то есть тот же день рождения, что и я. Я предположил, что из 1 - 365 дней я ищу, когда число 1 появляется снова, поскольку я принимаю 1, или 1 января - мой день рождения.

Ниже моя модифицированная версия функции duplicate.birthdays

duplicate.birthdays = function(n) { 
b = birthdays(n) 
index = 1:length(b) 
x = 1 
index.get.1 = index [x=1] 
return(index.get.1) 
} 

Однако я всегда получать вернулся первый индекс вместо того, соответствует ли не показатель значение 1.

Любая помощь будет будем очень благодарны и, надеюсь, это достаточно информации, чтобы понять, по сути, что я пытаюсь понять.

ответ

2

Ваша функция немного странно: Вы Подмените по x=1, который всегда будет 1.

Попробуйте что-то вроде:

duplicate.birthdays <- function(n) { 
    which(birthdays(n)==1) 
} 
+0

После попытки этих изменений я получаю обратно список переменных проб, по существу, int (0) int (0) int 12 . Является ли это предоставление индекса, в котором есть соответствие 1? Не совсем уверен, что это точно, но спасибо за помощь! – Zerbraxi

+0

Да, он дает позиции, где есть совпадение, или 'integer (0)', если их нет. Более удобной для пользователя версией может быть: 'duplicate.birthdays <- function (n) { b <- дни рождения (n); if (1% in% b) { return (который (b == 1)) }; } ' – jeremycg

+0

Большое спасибо! Это поставило меня на правильный путь. – Zerbraxi

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