【问题标题】:How to avoid using round() in every \Sexpr{}?如何避免在每个 \Sexpr{} 中使用 round()?
【发布时间】:2012-06-19 05:19:03
【问题描述】:

在使用 Sweave/knitr 时,有没有办法避免 round() 函数?在每个\Sexpr{} 中写round(,2) 真的很烦人。我希望整个文档保留两位小数。

感谢您的帮助
Mac

【问题讨论】:

  • 恕我直言,您可以为此设置hook。或者尝试pander,它会自动执行此操作:)
  • 您希望将输出限制为最多两位数,还是始终想要两位数,即使它们为零 (1.00)?第一个你应该能够通过在你的第一个块中设置 options( digits = 2 ) 来实现。
  • @vaettchen:将digits 设置为2,您将得到pi*100314,这是一个相当粗略的估计。

标签: r latex sweave knitr


【解决方案1】:

knitr 中,inline 挂钩可用于处理\Sexpr{} 语句的输出。因此,如果您只想在小数点后打印 2 位数字作为内联代码(同时保留整个 digits 选项),您可以这样做:

## First have a look at the default inline hook function
knit_hooks$get("inline")

## Then customize it to your own liking
inline_hook <- function(x) {
    if(is.numeric(x)) x <- round(x, 2)
    paste(as.character(x), collapse=", ")
}
knit_hooks$set(inline = inline_hook)

【讨论】:

  • +1 - 整洁,因为这增加了区分内联和块外观的能力!
  • @PeterM -- 绝对! See baptiste's answer here 另一个(非常有用的)自定义内联挂钩示例。
【解决方案2】:

首先,您可能希望使用formatC 而不是round 来获得两位数,即使它们为零。在 Sweave 中没有很好的方法来做到这一点。最好的选择可能是简单地创建一个具有短名称的新函数来执行您想要的格式;像

p <- function(x) {formatC(x, format="f", digits=2)}

这至少节省了一点打字时间:

The answer is $\Sexpr{p(x)}$.

不幸的是,在没有使用新的 Sweave 驱动程序的情况下,我认为没有其他事情可做(也许这是尝试knitr 的另一个原因,它似乎正在快速取得进展)。 Sweave 对 Sexpr 语句中的内容执行此操作,然后将 Sexpr 调用替换为结果。

as.character(eval(parse(text = cmd), envir = .GlobalEnv))

但是,你不能只写一个新版本的as.character;除了它可能以其他意想不到的方式改变行为的问题之外,由于命名空间,它总是调用 base 中的版本,即使全局环境中有另一个版本。

【讨论】:

  • 用 Sweave 想到黑暗的巫毒是很自然的 :) 你知道 Sweave 应该在哪里改变,这也是我对 R 核心的建议(他们可以做得更好,不仅使用 as.character ) 并被他们忽略。
  • 是的,确实是黑暗巫术。我有几个变体驱动程序,它们添加了我需要的某些功能,但是编写和维护它们很痛苦。我不断听到关于 knitr 的好消息,以及它如何让很多事情变得更容易。希望尽快尝试。感谢您的工作,@Yihui。
【解决方案3】:

如果你读过knitr package中的the motivation,你可能知道我是\Sexpr{}里面最讨厌round()的人。我很久以前就向 R core 建议过 Sweave,但它被忽略了,所以我开始了自己的包。

虽然 Josh O'Brien 的回答绝对正确,但我应该说你真的只需要 options(digits = 2)knitr,并且不需要重置默认的内联挂钩,因为默认挂钩尊重此选项。

【讨论】:

  • 感谢您的提示。这真的是一个很大的解脱。我是 R 和 LaTeX 工作的初学者,但相对于 Sweave 的优势是相当明显的。我想在短时间内大多数人都会改用 knitr。
猜你喜欢
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2019-10-12
  • 2021-05-24
相关资源
最近更新 更多