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

関数から (Rmpfr パッケージから) mpfr を 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=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"
于 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 に答える