Pregunta

Hay una opción en I para obtener el control de la exhibición del dígito. Por ejemplo:

options(digits=10)

Se supone que dará los resultados del cálculo de 10 dígitos hasta el final de la sesión R. En el archivo de ayuda de R, la definición para el parámetro cifras es el siguiente:

  

dígitos: controla el número de dígitos   imprimir al imprimir valores numéricos.   Es sólo una sugerencia. Los valores válidos   son 1 ... 22 con el valor predeterminado 7

Por lo tanto, se dice que esto es sólo una sugerencia. ¿Qué pasa si me gusta mostrar siempre 10 dígitos, no más o menos?

La segunda pregunta es, ¿y si me gusta mostrar más de 22 dígitos, es decir, para los cálculos más precisos como 100 dígitos? ¿Es posible con la base de R, o necesito un paquete / función adicional para que?

Editar Gracias a la sugerencia de jmoy, me trataron sprintf("%.100f",pi) y le dieron

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"

que tiene 48 decimales. Es este el límite máximo de R puede manejar?

¿Fue útil?

Solución

La razón es sólo una sugerencia es que se podría fácilmente escribir una función de impresión que ignora el valor opciones. Las funciones de impresión y formatea la hacen utilizar el valor options como un defecto.

En cuanto a la segunda pregunta, ya que R utiliza aritmética de precisión finita, sus respuestas no son precisas más allá de 15 ó 16 cifras decimales, por lo que en general, no se necesitan más. El gmp y RCDD acuerdo con paquetes aritmética de precisión múltiple (a través de un interace a la biblioteca GMP), pero esto se relaciona principalmente con grandes números enteros en lugar de más decimales para sus dobles.

Mathematica o arce le permitirá dar tantos decimales como su corazón desea.

EDIT:
Podría ser útil pensar en la diferencia entre decimales y cifras significativas. Si usted está haciendo las pruebas estadísticas que se basan en diferencias más allá de la cifra significativa 15a, a continuación, su análisis es casi seguro que la chatarra.

Por otro lado, si sólo se trata de cantidades muy pequeñas, es decir menos de un problema, puesto que R puede manejar el número tan pequeño como .Machine$double.xmin (por lo general 2e-308).

Comparación de estos dos análisis.

x1 <- rnorm(50, 1, 1e-15)
y1 <- rnorm(50, 1 + 1e-15, 1e-15)
t.test(x1, y1)  #Should throw an error

x2 <- rnorm(50, 0, 1e-15)
y2 <- rnorm(50, 1e-15, 1e-15)
t.test(x2, y2)  #ok

En el primer caso, las diferencias entre los números sólo se producen después de muchos cifras significativas, por lo que los datos son "casi constante". En el segundo caso, aunque el tamaño de las diferencias entre los números son los mismos, en comparación con la magnitud de los números de sí mismos que son grandes.


Según lo mencionado por e3bo, puede utilizar de múltiples números de punto flotante de precisión utilizando el paquete Rmpfr.

mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")

Estos son más lentos y más memoria de usar que (doble precisión) vectores numeric regulares, pero puede ser útil si usted tiene un problema mal condicionado o algoritmo inestable.

Otros consejos

Si desea producir toda la producción a sí mismo, puede utilizar sprintf(), por ejemplo.

> sprintf("%.10f",0.25)
[1] "0.2500000000"

especifica que quiere dar formato a un número de coma flotante con diez puntos decimales (en %.10f la f es de flotador y el .10 especifica diez puntos decimales).

No sé de ninguna manera de forzar a funciones de nivel superior de R para imprimir un número exacto de dígitos.

Viendo 100 dígitos que no tiene sentido si va a imprimir los números habituales de R, ya que la mejor precisión que se puede obtener utilizando 64 bits duplica es de alrededor de 16 dígitos decimales (mira .Machine $ double.eps en su sistema). Los dígitos restantes serán sólo basura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top