用knitr连接文本

时间:2013-09-04 07:24:15

标签: r knitr

使用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'),但显然是using cat is discouraged,并且在使用内联代码时不会输出任何内容。

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

2 个答案:

答案 0 :(得分: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函数中的明确格式化,则无法在此处进行,最好用sprintfOptions仅适用于内联数字代码,而不适用于函数foo提供的字符串。 knitr不会干扰paste的功能,而粘贴不会尊重options

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

“4.489324802”

答案 1 :(得分:0)

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