You can get an answer if you start somewhere other than the starting (0,0) starting point. The start parameter is a vector containing the interception and slope of the response, in the scale of the communication function. The problem of R, as reported, usually lies in the fact that the calculated (negative) logarithmic likelihood becomes infinite for the initial values. You can check it yourself: -sum(dpois(bar,0+0*foo,log=TRUE)) - Inf (because we configure the Poissons with a zero average value, but we get a non-zero answer).
However, this is not a complete explanation, because even for some starting points, such as (0,2), where the initial negative logarithmic likelihood is finite ( -sum(dpois(bar,0+2*foo,log=TRUE)) about 20) , the same error arises - one would have to go deeper into to understand what’s the matter, but I can imagine, for example, that the Poisson value of zero is not allowed at all in the code. The Poisson logarithmic probability is (constant plus) x*log(lambda)-lambda : even if it turns out OK, if lambda and x are zero, which is not always obvious in mathematics. In particular, if you look at poisson()$validmu , which is the function that glm uses to determine if the computed glm for Poisson is OK, you will see that its definition function (mu) { all(mu > 0) } . (One could change this to allow null values for mu , but there would be enough trouble that you would need serious reasons for this - I tried this, and there is another problem, because then deviations are calculated to be zero. In short, there were it would be easier to do this with a custom maximum likelihood score (e.g. bbmle::mle2() ) than hack glm to do this ...)
However, the starting point, at which there are no zero estimates of the Poisson average, works fine, although there are many warnings:
glm(bar ~ foo, family = poisson(link = "identity"), start=c(1,0))
However . I want to point out that you misunderstand the purpose of the link function. It is good to have zeros in the Poisson regression response variable, even with standard journal association. The GLM model for Poisson regression is y ~ Poisson(exp(a+b*x)) , not log(y) = a + b*x . The latter is bad if y=0 , but the former is excellent. glm(bar ~ foo, family = poisson()) works just fine.
In general, non-canonical link functions are a bit of a pain: they are sometimes exactly what you need (although from what you said, I'm not sure if this is true in your case), but they are usually harsher and tougher, than canonical links.
One final note: I would probably refer to what you want as a “non-canonical” or “non-standard” link; for me there would be a custom link function that would not be provided by the family() command in R, so you had to write the link function yourself (for example, see http://rpubs.com/bbolker/4082 )