从mpfr生成列表中获取值

时间:2012-07-16 05:04:03

标签: r

考虑以下载体:

> v1
[1] 0.000000e+00 0.000000e+00 1.110223e-16 4.440892e-15 3.266195e-08 2.531242e-07   
1.041204e-05 1.172329e-05 1.672447e-05 1.803203e-05

我已经从函数(从Rmpfr包)到v1:

应用了mpfr
> v2<-sapply(v1,function(x){mpfr(x,5)})

v2显然是一个列表,但我无法获得实际值。我尝试过使用unlist,v2 [[]],转换为字符v2 [[]]或矢量..

> v2

[[1]]
'mpfr1' 0

[[2]]
'mpfr1' 0

[[3]]
 'mpfr1' 1.11e-16

4 个答案:

答案 0 :(得分:4)

实际上我遇到了类似的问题,因为这是我第一次使用这个软件包。无论如何,我找到了一个简单的解决方案,虽然不是最优雅的,我可以补充......:

   # Compute 1/7 with 1000 bit precision and store the value in a character object
   x <- mpfr(1,1000)/7
   x.output <- capture.output(x)[2]
   result <- substr(x.output,5,nchar(x.output))

答案 1 :(得分:1)

我认为你根本不需要sapply(),你可以简单地传递一个向量:

require(Rmpfr)
v1 <- c(0.000000e+00, 0.000000e+00, 1.110223e-16, 4.440892e-15, 3.266195e-08, 2.531242e-07)
v2 <- mpfr(v1,5)
#-----
> v2
6 'mpfr' numbers of precision  5   bits 
[1]        0        0 1.11e-16 4.44e-15  3.35e-8  2.53e-7

作为一个警告,我以前从未使用过此软件包或函数,因此我建议您仔细阅读?mpfr以确保您能够快速了解​​参数及其含义。

答案 2 :(得分:1)

您可能希望str()使用选项give.head=FALSEdigits.d

> x<-mpfr(1,120)/7

> x    #This would print the precision info
1 'mpfr' number of precision  120   bits
[1] 0.14285714285714285714285714285714285722

> str(x, give.head=FALSE, digits.d=10)
0.1428571429

如果要存储此字符串,则需要capture.output()

> y<-capture.output(str(x, give.head=FALSE, digits.d=10))
> y
[1] "0.1428571429"

答案 3 :(得分:0)

另一种解决方案:

x <- 2*Rmpfr::pnorm(mpfr((1.0490/0.0246), precBits=100), lower.tail=FALSE, log.p = FALSE)

1 'mpfr' number of precision  100   bits 
[1] 2.6253807992339014869315885783658e-397

sub("\'mpfr1\' ", "", capture.output(x@.Data[[1]]))
[1] "2.6253807992339014869315885783658e-397"