我是一名 C++ 程序员,我是 R 的新手。有人告诉我在 R 中使用 for 循环是一个坏主意,最好使用 sapply
。我编写了以下代码来计算 birthday coincidence 的概率:
prob <- 1 # prob of no coincidence
days <- 365
k <- 50 # how many people
probability <- numeric() #probability vector (empty right now)
for(i in 1:k){
prob <- (days - i + 1)/days * prob # Formula for no coincidence
probability[i] <- 1 - prob
}
我如何用
sapply
做同样的事情?我想做类似的事情:1 - sapply(1:length(m), function(x) prod(m[1:x]))
但是如何使用公式来避免生日的巧合呢?
最佳答案
你可以这样做:
m <- (days - seq_len(k) + 1) / days
probability <- 1 - sapply(seq_along(m), function(x) prod(m[1:x]))
但这在有用的
cumprod
函数中会丢失:probability <- 1 - cumprod(m)
这会快很多。
(还在
seq_along
和 seq_len
处给出了一个峰值,它们在处理零长度向量时比 :
更健壮。)关于r - 在R中应用,如何使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18304672/