r0 <- 2.5
f <- seq(from = 1, to = 0, by = -0.001)
fes_eq <- numeric(length(f))
n <- length(f)
for (i in 1:n)
{
fes_eq[i] <- 1-f-exp(-r0*f[i])
while (fes_eq[i] < 0)
{
print(f[i])
i <- i+1
}
}

r outputs all values of f and presents the warning "Error in while (fes_eq[i] < 0) { : missing value where TRUE/FALSE needed" at the end
i am trying to get all values of f that gives negative values of fes_eq and I expect to see the smallest f to be around 0.892.
what goes wrong here? what should I do to fix it?

The while loop if it activates for any negative value will spin off I ever higher beyond where fes_eq[i] could have been assigned. So the values will be missing. And a missing value is not true or false so while loop condition will error

sidenote, I don't understand the actual conceptual purpose of your code, but as written it throws warnings, and it doesn't make intuitive sense why one would do the thing that gives the warnings.
Therefore I suspect that

fes_eq[i] <- 1-f-exp(-r0*f[i])

should be changed to

fes_eq[i] <- 1-f[i]-exp(-r0*f[i])

so that each fes_eq[i] value equals exactly one thing, and not 1001 things...
but I don't know