2

考虑以下向量:

> 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

我已将 mpfr 从函数(来自 Rmpfr 包)应用到 v1:

> 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

4 回答 4

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))
于 2012-11-02T10:57:52.077 回答
2

您可能希望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"
于 2015-07-27T12:48:14.030 回答
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以确保您了解这些论点及其含义。

于 2012-07-16T05:14:21.813 回答
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"
于 2020-03-06T17:08:39.270 回答