开发者

Usage of package ‘Brobdingnag’ in R language

I'm running into problems regarding the usage of the Brobdingnag package - after setting

a2 <- as.brob(0.1)^1000, 

a2 = exp(-2302.6)

a1 <- as.brob(0.1)^800, 

a1开发者_运维技巧 = exp(-1842.1)

I get different results for using sum(a1,a2) and sum(a2,a1) - Each time the result equals the first argument given to the sum function. It seems that maybe sum is not overrided by the Brobdingang package even though its supposed to? Or maybe i'm doing something wrong?

I asked this question also as a reply to another question I wrote, see here

[EDIT: Answer from author of the package]

Hi Dan

This is definitely a bug in the package; thank you for the report! Unfortunately, correcting it will take me some considerable time.

In the meantime, please find below the usual R idiom for calculating the sum of two brobs:

> a1 <- as.brob(0.1)^800
> a2 <- as.brob(0.1)^1000
> a1+a2


> a1 <- as.brob(0.1)^800
> a2 <- as.brob(0.1)^1000


> a1+a2
[1] +exp(-1842.1)
> a2+a1
[1] +exp(-1842.1)

> sum(cbrob(a1,a2))
[1] +exp(-1842.1)
> sum(cbrob(a2,a1))
[1] +exp(-1842.1)
> 


I can reproduce your issue with the following code. One answer might be to + instead of sum. Added: Another would be to have your data in a vector before doing the sum

> library(Brobdingnag)
> (a1 <- as.brob(0.1)^800) 
[1] +exp(-1842.1)
> (a2 <- as.brob(0.1)^1000)
[1] +exp(-2302.6)
>
> a1 + a2
[1] +exp(-1842.1)
> a2 + a1
[1] +exp(-1842.1)
>
> sum(a1, a2)
[1] +exp(-1842.1)
> sum(a2, a1)
[1] +exp(-2302.6)
> 
> sum(as.brob(0.1)^c(1000,800))
[1] +exp(-1842.1)
> sum(as.brob(0.1)^c(800,1000))
[1] +exp(-1842.1)

It seems to be that you cannot use sum(,) like that. Here are some similar strange results with more practical numbers

> as.brob(0.1) + as.brob(1)           # OK, gives exp(ln(1.1))
[1] +exp(0.09531)     
> as.brob(1) + as.brob(0.1)           # OK, gives exp(ln(1.1))
[1] +exp(0.09531)
> sum(as.brob(c(0.1, 1)))             # OK, gives exp(ln(1.1))
[1] +exp(0.09531)
> sum(as.brob(c(1, 0.1)))             # OK, gives exp(ln(1.1))
[1] +exp(0.09531)
>
> sum(as.brob(0.1), as.brob(1))       # not OK, gives first term exp(ln(0.1))
[1] +exp(-2.3026)
> sum(as.brob(1), as.brob(0.1))       # not OK, gives first term exp(ln(1))
[1] +exp(0)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜