[R] Rmpfr question

Martin Maechler maechler at lynne.ethz.ch
Wed Sep 25 11:08:07 CEST 2013


>>>>> Michel  <michelgomez at free.fr>
>>>>>     on Tue, 24 Sep 2013 12:22:10 +0200 writes:

    > Hello, Thanks for your answer The file does not contains
    > numbers in high precision but all the calculation applied
    > to these data will be

    > In attachment a text file containing some lines And her
    > few values:
    > 11111.0054014388224326026488598,-68239.4114845811819662912967033,10053.1824584878233990181684021
    > 3.05363891777017837760380136736,-1.40443175474415104684797195311,1.36766960877453817890022497172

(two lines, typically split by mail writers/readers)

Aha!  But these actually *ARE* of  'high precision', i.e.
you cannot store them as usual double precision numbers in full accuracy.

So, I've prepared the following -- 100% reproducible -- script
to show you how to get such numbers into an Rmpfr matrix :


## MM: Reproducible example
set.seed(17); x <- mpfr(matrix(rnorm(28), 7, 4), precBits=128)
x <- x^2
mfile <- tempfile()
write.table(array(format(x), dim=dim(x)), file = mfile,
	    row.names=FALSE, col.names=FALSE, sep=",")
## to check:
writeLines(readLines(mfile) [1:2])


## Now, let's assume mfile contains the "high precision" matrix we want to get as
## mpfrMatrix :
## 1) Assume you know the number of columns, then this is fastest :
m.ncol <- 4
chmat <- matrix(scan(mfile, "", sep=","), ncol = m.ncol )

## 2) Nothing is known, ... ok, why not make the detour via read.table():
chmat <- as.matrix(read.table(mfile, colClasses="character", sep=","))

## in both cases:

require(Rmpfr)# the package

M <- mpfr(chmat)#-> determines precision *from* the input, here  133 .. 143 bits

## or set the precision yourself, high enough:
M <- mpfr(chmat, precBits = 144)

## and e.g. this works:

crossprod(M) ## == M'M

-------

Hoping this helps,
Martin



More information about the R-help mailing list