我想使用表查找来加快一些但不是其他计算。例如,对于正态分布cdf:
fastlogcdf( seq(-2,2,0.5))
这很好用(
) fastlogcdf( seq(-8,8,0.5))
但不是
ifelse
因为cdftable[-8+1]
想要在根据条件分配之前完全评估这两个结果。通常,我可以忽略这一点,但这会产生一个中间错误,只有0可以与负下标混合。当然,没有{{1}}。
一种方法是使用我定义的tindex,但是先映射到向量中的一些随机无用数字然后丢弃它似乎很奇怪。
唉,即使这个解决方案仍然没有解决问题,因为整个观点是在表查找时要避免缓慢的pnorm()调用!所以我确实需要一个真正的条件ifelse,它只为每个向量元素评估真正的语句方。解决这个小困境的R方法是什么?建议表示赞赏。
问候,/ iaw
答案 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)
你的问题很可能就在那里。我不知道这个功能是什么,你自己定义了吗?