3

使用knitr,我想打印一些变量的几个函数的结果,例如

There were x1 (a=\`r a(x1)\`; b=\`r b(x1)\`) and x2 (a=\`r a(x2)\`; b=\`r b(x2)\`)

因为我不喜欢对每个变量都重复这个,所以我写了一个函数来生成字符串:

foo <- function(x) paste('a = ',a(x), '; b = ', b(x))

现在我可以写了There were x1 (`r foo(x1)`) and x2 (`r foo(x2)`)

它有效,但不使用options('digits'),因此它打印 15 位数字。cat()使用options('digits'),但不鼓励使用 cat并且在使用内联代码时不输出任何内容。

是否有替代paste()使用 `options('digits') 格式化数字并在内联块中创建输出的替代方法?

4

2 回答 2

3

“用猫劝阻”:这是一种误解。Yihui 警告不要使用cat来输出消息。如果要创建干净的输出,通常必须使用 cat。在您的块中尝试以下操作:

options(digits=2)
x1 = 2.304302
# chunk output
x1 # Ugly, [1]
cat(x1,"\n") # Must use cat here, to avoid the [1] printed

你的主要问题是:如果你的foo函数中没有明确的格式,这里没有机会,最好使用sprintf. Options仅适用于内联数字代码,不适用于函数提供的字符串fooknitr不干扰功能paste,贴不兑现options

x2 = 4.489324802    
options(digits=2)
paste(x2)

“4.489324802”

于 2013-09-04T08:07:52.920 回答
0

可能format(x, ...)会为此工作。(未测试)

于 2013-09-04T07:59:38.610 回答