使用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')格式化数字并以内联块的形式创建输出?
答案 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
函数中的明确格式化,则无法在此处进行,最好用sprintf
。 Options
仅适用于内联数字代码,而不适用于函数foo
提供的字符串。 knitr
不会干扰paste
的功能,而粘贴不会尊重options
。
x2 = 4.489324802
options(digits=2)
paste(x2)
“4.489324802”
答案 1 :(得分:0)
可能format(x, ...)
可以为此工作。 (未经测试)