我正在尝试编写一个函数
在此函数中称为函数smart.pois
x
和lamba
的Poisson pmf函数我想检查x的以下条件
1.如果x为负,则返回缺失值(NA
,.
)。
2.如果x为非整数,则截断x然后继续。
3.如果x对于阶乘函数太大,则返回可能的最小数值。
我编写了此函数,但无法正确编写条件。
smart.pois <- function(x, lambda){
y<- round((exp(-lambda))* (1/factorial(x))*exp(x*log (lambda)),3)
return (y)
}
if (x == "Negative")
return (NA)
if (x =){
return
}
预先感谢
答案 0 :(得分:0)
在函数中进行计算,然后使测试独立。我将首先测试条件并更新x,然后进行如下计算:
smart.pois <- function(x, lambda, xmax=Inf) {
x <- pmin(x, xmax) #3. If x is too large - you have to define what is too large
x <- trunc(x) #2. If x is non-integer
idx <- x < 0 #1. If x is negative
x[idx] <- 0 #Overwrite negative x to avoid warnings
ifelse(idx, NA, round((exp(-lambda))* (1/factorial(x))*exp(x*log (lambda)),3))
}
smart.pois(c(-1, 1, 1.2, 1.9, 999), 1, 100)
#NA 0.368 0.368 0.368 0.000