考虑以下载体:
> 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
答案 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=FALSE
和digits.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"