函数返回NaN时不应该

时间:2012-06-08 08:19:00

标签: r

我已经定义了以下两个函数

test <- function(t) {   
   return( (0.5*eta^2/theta)*(1-exp(-2*theta*t)) )   
}

test2 <- function(s,t=s) {   
   return( (0.5*eta^2/theta)*exp(-theta*(s+t))*(exp(2*theta*min(s,t)) - 1) )   
}

并放

> theta=1.2  
> eta=1.8  
> mu=0.2

现在定义了测试函数,以便test(t)=test2(t,t)。问题是返回以下内容

> test2(500)   
[1] NaN    
> test(500)    
[1] 1.35

这里有什么问题?提前谢谢。

2 个答案:

答案 0 :(得分:2)

可能在第二个函数中缺少乘法,这适用于我

test <- function(t) {
   return( (0.5*eta^2/theta)*(1-exp(-2*theta*t)) )
}

test2 <- function(s,t=s) {
   return (0.5*eta^2/theta)*exp(-theta(s+t))*(exp(2*theta*min(s,t)) - 1) 
}

theta=1.2
eta=1.8
mu=0.2

test2(500)
test(500)

答案 1 :(得分:2)

@tomaskrehlik正确识别了原始指数计算中的下溢/溢出问题。为避免此问题,您可以将其重写为:

test3 <- function(s,t=s) {
   return((0.5*eta^2/theta)*exp(-theta*(s+t)+2*theta*min(s,t)) -
      exp(-theta*(s+t)))

与此同时,我对另一个答案中有趣的return [expression that evaluates to NaN]代码发生的事情感到有些困惑...... ??