R:使用ifelse向量化的快速表查找

时间:2016-05-25 22:46:51

标签: r if-statement

我想使用表查找来加快一些但不是其他计算。例如,对于正态分布cdf:

   fastlogcdf( seq(-2,2,0.5))

这很好用(

   fastlogcdf( seq(-8,8,0.5))

但不是

ifelse

因为cdftable[-8+1]想要在根据条件分配之前完全评估这两个结果。通常,我可以忽略这一点,但这会产生一个中间错误,只有0可以与负下标混合。当然,没有{{1}}。

一种方法是使用我定义的tindex,但是先映射到向量中的一些随机无用数字然后丢弃它似乎很奇怪。

唉,即使这个解决方案仍然没有解决问题,因为整个观点是在表查找时要避免缓慢的pnorm()调用!所以我确实需要一个真正的条件ifelse,它只为每个向量元素评估真正的语句方。

解决这个小困境的R方法是什么?建议表示赞赏。

问候,/ iaw

1 个答案:

答案 0 :(得分:0)

不是答案,但我觉得我不能在评论中说明这一点,抱歉:

根据您的功能,以及您如何调用它,m = 0和sd = 1,这意味着z将始终等于x。因此,只要x在MINZ到MAXZ范围之外,你的表达式就是:

(z<=MINZ)|(z>=MAXZ) returns TRUE

在你的第一个序列(-2:2)中,你永远不会遇到这个(它总是等于FALSE),但在你的第二个(-8:8)中你会遇到这个。这是你唯一一次打电话

cdf(x,m,sd,log=TRUE)

你的问题很可能就在那里。我不知道这个功能是什么,你自己定义了吗?