2016-04-12 15 views
6

Ich versuche, extrem kleine Zahlen (< 1E-12) in einer ASCII-Tabelle anzuzeigen. (Glaub mir, ich kann keine Alternative finden.) Bisher habe ich Stargazer und Xxtable ausprobiert. Keine von beiden scheint zu funktionieren. Ich kann die Zahlen in wissenschaftlicher Notation mit xtable in HTML, aber nicht in ASCII anzeigen. Stargazer scheint nicht die Möglichkeit zu haben, Zahlen in wissenschaftlicher Notation anzuzeigen. Unten ist ein Beispiel:Wie können Zahlen in wissenschaftlicher Notation in ASCII-Tabellen angezeigt werden?

library(stargazer) 
example <- data.frame(parameter = letters, value = runif(26, min = 1E-14, max = 5E-14)) 
stargazer(example, summary = F, type = "text", digits = NA) 

Alle Werte als 0 abgeschnitten werden, auch wenn ich die Ziffern Option als NA eingestellt, was alles halten sollte. Jede Hilfe wird wirklich geschätzt! Vielen Dank!

+0

Sie es sie in Strings durch Umwandlung vorher zwingen könnte ... nicht schön, aber es würde funktionieren. – alistaire

Antwort

4

Sie können den Wert in ein Zeichen umwandeln. Ich habe dies mit der format Funktion gemacht, da es so einfach ist, die Anzahl der signifikanten Zahlen zu kontrollieren. Ich habe auch das dplyr Paket die Neuformatierung on the fly zu tun:

library(dplyr) 

stargazer(example %>% mutate(value = format(value, scientific = TRUE, digits = 4)), 
      summary = FALSE, type = "text") 
====================== 
    parameter value 
---------------------- 
1  a  4.456e-14 
2  b  2.773e-14 
... 
25  y  2.982e-14 
26  z  1.771e-14 
---------------------- 

Sie auch dplyr wie dies vermeiden könnte:

example$value = format(example$value, scientific = TRUE, digits = 4) 

stargazer(example, summary = FALSE, type = "text") 
2

Erscheint Sie bereit sind, akzeptiere die Ausgabe als Zeichen (zumindest wenn ich deine Verwendung von "ASCII" richtig interpretiere). Könnte auch sprintf verwenden, die Fortran-ähnliche Spezifikationen akzeptieren:

> formatC(2e-14, digits=16, format="f") 
[1] "0.0000000000000200" 
> print(formatC(2e-14, digits=16, format="f") , quote=FALSE) 
[1] 0.0000000000000200 
> cat(formatC(2e-14, digits=16, format="f")) 
0.0000000000000200 

Für wissenschaftliche Schreibweise:

> cat(formatC(2e-14, digits=4, format="e")) 
2.0000e-14 
+0

Danke 42-. Ich würde es vorziehen, die Zahlen in wissenschaftlichen Notationen zu haben. – Jin

+1

Dann verwenden Sie format = "e" –