如何在ASCII表格中以科学计数法显示数字?

时间:2016-04-12 21:30:19

标签: r xtable stargazer

我试图在ASCII表中显示极小的数字(< 1E-12)。 (相信我,我找不到任何替代方案。)到目前为止,我已经尝试过观星者和xtable。它们似乎都不起作用。我可以用HTML中的xtable以科学记数法显示数字,但不能显示ASCII。 Stargazer似乎无法用科学记数法显示数字。以下是一个例子:

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

即使我将数字选项设置为NA,所有值都被截断为0,这应该保留所有内容。任何帮助真的很感激!谢谢!

2 个答案:

答案 0 :(得分:4)

您可以将值转换为字符。我使用format函数完成了这项工作,因为这样可以轻松控制有效数字的数量。我还使用dplyr包来动态重新格式化:

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
----------------------

您还可以避免dplyr这样:

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

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

答案 1 :(得分:2)

似乎您愿意接受输出作为字符(至少如果我正确地解释您对“ASCII”的使用)。也可以使用sprintf接受类似Fortran的规范:

> 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

对于科学记数法:

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