Another exceedingly polite questioner. Cultural differences!
I think we can skip discussing if we are doing well, and get to the point. To start with, I got thrown by these two lines: a=rnorm(1000, 110, 5) s = length(a) This does not relate to the difficulty, but is a sort of sloppy use as a was created with a request to be 1,000 random numbers. No need to calculate the length. You could just say s <- 1000 We have no idea what the purpose of your function ff is meant to be used for and what it is normally given as an argument as you seem to just pass the function as an argument to a stats package function called uniroot. As such, the function should return values for a given argument that can be evaluated between lower and upper bounds. OK, it took some time to look things up that would have been easier had you told us a bit more. But it gets worse as your function references "s" in this line within: inner = vector("numeric", length = s) You are not passing s to the function but using it from outside to make an empty variable of the same length? Similarly, you are putting other variables like r, lam, thr in a global environment and using it within the function. Is this a good design? As other have pointed out, you should evaluate the function ff to see what it returns on it's own, not wait for uniroot to fail in calling it. Your function ff seems to make a vector of 1,000 complicated values based on the global values including the values in "a" and 'b" that are random then take the mean of the results with an adjustment. I have no idea if your code is modeled after anything in particular or is correct. But I exercised it in the lower range and it produces reasonable numbers: sapply(0:10,ff) [1] -0.1715207 -0.1693173 -0.1671317 -0.1649635 -0.1628125 -0.1606784 -0.1585609 -0.1564598 [9] -0.1543749 -0.1523059 -0.1502526 But in the upper range your function returns a NaN or NOT A NUMBER sapply(9995:10000,ff) [1] NaN NaN NaN NaN NaN NaN That would explain the error message. So you need to look at ff and see how the NaN is introduced perhaps just for larger numbers. You may have an overflow problem for example where you are making number too large to fit. Who knows? What I know is when I make your 10,001 calculations only the first 140 or so are not Nan. ff(142) and beyond all fail. > sapply(0:10000,ff) -> temp > sum(is.nan(temp)) [1] 9859 So it may be obvious to you why zz-thr has such a threshold, but not to me. I would try to make sure you implemented the algorithm required correctly in the code and that the range of random numbers you select fits the needs. If you can get ff() to return only valid numbers, it may be a step. And note that when I change the mean() function you call to add na.rm=TRUE, it removes the NaN from the calculation (albeit that should not mean it is now correct) and a new error shows up: > ff = function(zz){ + inner = vector("numeric", length = s) + for(k in 1:s){ + inner[k]=(1- lam*((1+b[k]*((zz-thr)/a[k]))^(-1/b[k]))) + } + answer = mean(inner, na.rm=TRUE)- (1- (1/r)) + return(answer) + } > out=uniroot(ff, lower = 0, upper = 10000 )$root out Error: unexpected symbol in "out=uniroot(ff, lower = 0, upper = 10000 )$root out" You left a dangling " out" at the end. You may mean: out=uniroot(ff, lower = 0, upper = 10000 )$root My current result is 111.6597 but as noted is meaningless as I threw out lots of NaN. -----Original Message----- From: R-help <r-help-boun...@r-project.org> On Behalf Of Md. Moyazzem Hossain Sent: Thursday, August 4, 2022 9:31 AM To: r-help mailing list <r-help@r-project.org> Subject: [R] Need help Dear R Experts, I hope that you are doing well. I am facing a problem to find out the value of the following function. I need help in this regard. ##### a=rnorm(1000, 110, 5) b = rnorm(1000, -0.3, 0.4) s = length(a) lam=0.15 thr=70 r= 10 ff = function(zz){ inner = vector("numeric", length = s) for(k in 1:s){ inner[k]=(1- lam*((1+b[k]*((zz-thr)/a[k]))^(-1/b[k]))) } answer = mean(inner)- (1- (1/r)) return(answer) } ######## out=uniroot(ff, lower = 0, upper = 10000 )$root out ########### Error ######## Error in uniroot(ff, lower = 0, upper = 10000) : f.upper = f(upper) is NA Please help me. Thanks in advance. Take care. Hossain -- Best Regards, Md. Moyazzem Hossain Associate Professor Department of Statistics Jahangirnagar University Savar, Dhaka-1342, Bangladesh [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.