【问题标题】:knitr displaying digits of an integer without scientific notationknitr 显示没有科学计数法的整数的数字
【发布时间】:2015-06-17 10:15:35
【问题描述】:

当显示带有超过四位数的 inline-code 的数字时,例如

`r 21645`

编织的 html 文件中的结果是这样的:2.164510^{4}(实际上在 inline-hook 内部进行了计算,结果为 21645)。即使我只是想让它打印数字,就像这样:21645。我可以很容易地解决这个问题,例如将它包装在as.integerformatprint 中,但是我如何为整个 knitr-document 设置一个选项,以便它打印整个整数(我只需要打印 5 位数字)?手动执行此操作会非常烦人。设置options(digits = 7) 没有帮助。我猜我必须设置一些块选项或定义一个hook,但我不知道如何

【问题讨论】:

标签: r knitr


【解决方案1】:

我已经解决了,只是在 knitr 文档开头的 setoptions-chunk 中包含以下代码行:

options(scipen=999)

解决了这个问题,就像人们可以从@Paul Hiemstra 那里读到这个答案一样:

https://stackoverflow.com/a/25947542/4061993

来自?options的文档:

scipen:整数。决定打印时要施加的惩罚 固定或指数表示法的数值。正值偏差 对固定和对科学记数法的否定:固定记数法 将是首选,除非它比 scipen 数字更宽。

【讨论】:

    【解决方案2】:

    如果您不想在这种情况下显示科学计数法,但又不想为您的knitr 报告完全禁用它,您可以使用format() 并设置scientific=FALSE

    `r format(21645, scientific=FALSE)`
    

    【讨论】:

      【解决方案3】:

      请注意,如果您将数字键入为整数,它将被正确格式化:

      `r 21645L`
      

      当然,您始终可以设置内联挂钩以获得更大的灵活性(甚至最好在您的答案中设置全局选项):

      ```{r}
      inline_hook <- function(x) {
        if (is.numeric(x)) {
          format(x, digits = 2)
        } else x
      }
      knitr::knit_hooks$set(inline = inline_hook)
      
      ```
      

      【讨论】:

      • 你回答的第一部分我知道,关于钩子的第二部分很有趣,我不明白钩子是如何工作的,现在我知道了,非常感谢!如果我理解正确,钩子只会影响数字向量的显示方式,而不影响其他内容?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      相关资源
      最近更新 更多