knitr如何在不使用科学计数法的情况下显示整数的数字

28

当使用内联代码显示超过四位数的数字时,例如

`r 21645`

在一个html文件中,结果是这样的:2.164510^{4}(实际上,在inline-hook里有一个计算,得到的结果是21645)。虽然我只想打印数字,比如这样:21645。我可以很容易地解决一个实例,将其包装在as.integerformatprint中,但我如何设置整个knitr文档的选项,以便它像这样打印整数(我只需要打印5位数字)?手动操作变得非常烦人。设置options(digits = 7)没有帮助。我猜我必须设置一些区块选项或定义一个钩子,但我不知道怎么做。


可能是 https://dev59.com/IF8e5IYBdhLWcg3wPIeA(在其他答案中链接)的重复问题。 - michael
3个回答

33
我已经解决了这个问题,只需在knitr文档开头的setoptions-chunk中添加以下代码行:
options(scipen=999)

解决了这个问题,可以在@Paul Hiemstra的回答中找到详细信息:

https://dev59.com/IF8e5IYBdhLWcg3wPIeA#25947542

来自?options文档的描述:

scipen: 整数值。在决定使用固定或指数表示法打印数字值时要应用的惩罚。正值倾向于使用固定表示法,负值则倾向于科学计数法:除非比固定表示法多scipen位,否则将优先使用固定表示法。


24

如果您不想在此实例中显示科学计数法,但也不想完全禁用您的knitr报告,请使用format()并设置scientific=FALSE

`r format(21645, scientific=FALSE)`

10

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

`r 21645L`

当然,您始终可以设置内联钩子以获得更大的灵活性(即使像您的答案中一样设置全局选项更好):

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

```

我知道你回答的第一部分,关于钩子的第二部分很有趣,我之前不明白钩子是如何工作的,现在我懂了,非常感谢!如果我理解正确,钩子只影响数字向量的显示,而不影响其他任何东西? - grrgrrbla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接