As a general rule, I would advise, when performing calculations which rely on convergence, you should test for failure to converge
fs_pois <- function(data, true, guess) {
cat(guess, " ",(mean(data)*exp(-guess)),"\n")
if (abs(guess-true) < 0.01) return(guess)
if (round((mean(data)*exp(-guess)),10) == 1) # i just simplifed the equation modifying guess
cat("Failed to converge, ", guess,"\n")
else return(fs_pois(data, true, guess + (mean(data)*exp(-guess))-1))
}
data <- rpois(100,lambda=0.34)
fs_pois(data, 0.34, 0.36)
example output:
> fs_pois(data, 0.34, 0.36)
0.36 0.2232564
-0.4167436 0.4854443
-0.9312993 0.8120974
-1.119202 0.9799709
-1.139231 0.9997967
-1.139434 1
-1.139434 1
Failed to converge, -1.139434