在R中,我想创建一个返回最小n的函数,使得自然对数的第n次重复给出小于1的值。例如:fun(9182)= 3因为ln(ln(ln(9182)))= 0,793< 1。 任何建议将不胜感激!
答案 0 :(得分:2)
logstar<-function(x){if (x<1) 0 else 1 + logstar(log(x))}
答案 1 :(得分:2)
@ mrip的答案适用于单个值。如果你想要一个适用于矢量的函数,你需要使用ifelse()
而不是if
:
> logstar <- function(x){ifelse(x<1,0,1 + logstar(ifelse(x<1,x,log(x))))}
> x = c(0.5,1,100,10000,1E8)
> logstar(x)
[1] 0 1 3 3 4
ifelse()
递归调用中的logstar()
会阻止log()
在某些情况下生成NaN
。