2015-10-13 39 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月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

尝试我取回变量列表此更改后probs读数基本上为 int(0) int(0) int 12 。这是否提供了与1匹配的索引?不完全确定这是什么返回,但谢谢你的帮助! – Zerbraxi

+0

是的,它给出匹配的位置,或者如果没有一个,则给出“整数(0)”。更方便使用的版本可能是:'duplicate.beirthdays < - function(n){< - birthdays(n);如果(1%以%b计){ return(which(b == 1)) }; }' – jeremycg

+0

非常感谢!它使我走上了正确的轨道。 – Zerbraxi

相关问题