Preventing R from Rounding

Preventing R From Rounding

It's not rounding; it's just the default format for printing large (or small) numbers.

a <- 893893084082902
> sprintf("%f",a)
[1] "893893084082902.000000"

See the "digits" section of ?options for a global solution.

R: Number precision, how to prevent rounding?

I think the Rmpfr package does what you want:

library(Rmpfr)
x <- mpfr(numbers,200) # set arbitrary precision that's greater than R default
cumulative <- cumsum(x)
diff(cumulative)

Here's the top and bottom of the output:

> diff(cumulative)
109 'mpfr' numbers of precision 200 bits
[1] 0.02062180066950659862445860426305443979799747467041015625
[2] 0.021931558829559001655429284483034280128777027130126953125
[3] 0.02330137817820800150148130569505156017839908599853515625
[4] 0.0247280955947510004688805196337852976284921169281005859375
...
[107] 1.117520522117570086014450710640040701536080790307716261438975e-43
[108] 9.866891968888769759087690539062888824928577731689952701181586e-44
[109] 8.742485438921260418707338389502002282130643811990663213422948e-44

You can adjust the precision as you like by changing the second argument to mpfr.

How to avoid number rounding when using as.numeric() in R?

It's how R visualize data in a tibble.

The function map_dfc is not rounding your data, it's just a way R use to display data in a tibble.

If you want to print the data with the usual format, use as.data.frame, like this:

head(as.data.frame(my_char), n = 4)
V1
#>1 246.00
#>2 222.22
#>3 197.98
#>4 135.10

Showing that your data has not been rounded.

Hope this helps.

as.numeric is rounding off values

I think this is a representation problem, not an actual rounding problem ...

options("digits") ## 7

From ?options:

‘digits’: controls the number of digits to print when printing numeric values. It is a suggestion only. Valid values are
1...22 with default 7. See the note in ‘print.default’ about
values greater than 15.

digits can be reset either on a one-off basis, i.e. print(object,digits=...), or globally, i.e. options(digits=20) (20 is probably overkill but helps you see what's happening: based on the results below, 10 might serve your needs well.)

as.numeric(data1$colC)
[1] 4023108 3180863 2558778 2393736 1333148 1275627
print(as.numeric(data1$colC),digits=10)
[1] 4023107.87 3180863.42 2558777.81 2393736.25 1333148.48 1275627.13
print(as.numeric(data1$colC),digits=20)
[1] 4023107.8700000001118 3180863.4199999999255 2558777.8100000000559
[4] 2393736.2500000000000 1333148.4799999999814 1275627.1299999998882

How to prevent R from rounding seconds

You can use the lubridate package to maintain the full precision of your data.

times <-
c(
"19:56:05.938836",
"19:56:06.269024",
"19:56:06.868525",
"19:56:15.080690",
"19:56:15.422007",
"19:56:16.132036"
)

hms(times)
# [1] "19H 56M 5.938836S" "19H 56M 6.269024S" "19H 56M 6.868525S" "19H 56M 15.08069S"
# [5] "19H 56M 15.422007S" "19H 56M 16.132036S"

In R, how to stop xtable from automatically rounding?

How about digits?

xtable(df,digits=4)
% latex table generated in R 2.12.2 by xtable 1.5-6 package
% Tue Oct 25 11:39:25 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rr}
\hline
& x \\
\hline
1 & 2.2220 \\
2 & 3.3330 \\
3 & 6.6666 \\
\hline
\end{tabular}
\end{center}
\end{table}

Rounding error in R?

This is a combination of two extremely Frequently A'd Qs.

  • finite floating-point precision: this R FAQ 7.31, see e.g. Why are these numbers not equal? . The value gets rounded to 178379.5. It won't help if you set options(digits=22) to print numbers to more decimal places; the precision has been lost because (as you suggested) R only stores values up to 53 binary/22ish decimal digits of precision.
  • round to even: R "rounds to even", see Is there an error in round function in R? . That means the value will be rounded up.

This is not about printing precision.

If you had used fewer '9's, you would have seen what you expected (which would be a combination of R's limited printing precision plus the expected rounding)

> x <- 178379.49
>
> x
[1] 178379.5 ## prints as .5, but full precision is present
> round(x)
[1] 178379


Related Topics



Leave a reply



Submit