我想使用diff(log(myvar))
来计算一些时间序列日志返回值。在这种情况下,myvar
中的某些值设置为0
而diff()
会返回Inf
,因为它应该是数学上的。
当滞后对的任一数据点为diff()
时,如何强制0
发出异常并返回0
?例如
diff(log(c(0,1,2,3,4)))
会返回
0 0.6931472 0.4054651 0.2876821
强制第一个计算值为0
而不是Inf
。
更新 我使用is.infinite()实际上遇到了问题。考虑以下情况:
> v = diff(log(c(1, 0, 0, 2, 3)))
> v
[1] -Inf NaN Inf 0.4054651
> is.infinite(v)
[1] TRUE FALSE TRUE FALSE
这里我们有3种不同的情况,-Inf,Inf和NaN。目标是将0设置为基本报价为0的所有回报,因此我必须添加v[is.nan(v)] = 0
。
为什么我要将返回值设置为0而不是NA?嗯,这更像是一个逻辑问题,而不是一个编程问题,但我的理由是,在我的情况下,0意味着参考价格没有改变(而不是它未知)。
答案 0 :(得分:2)
你也可以这样做:
d[is.infinite(d)] <- 0
答案 1 :(得分:1)
的愚蠢解决方案是否有原因?
d <- diff(log(x))
d[abs(d)==Inf] <- 0
不起作用? (假设您的数据中只有非限定值,我认为获得Inf
或-Inf
的唯一方法是获得零值...)
答案 2 :(得分:1)
还应该添加
d[is.nan(d)] = 0
对于0/0案例。