R 内联刀的控制数字打印

R 内联刀的控制数字打印,r,knitr,R,Knitr,我正在进行一个将knitr项目转换为HTML(此时)。我试图使用print(x,digits=2)功能控制数字打印,该功能在控制台中运行良好。然而,当我编织降价时,它不会产生任何内联内容。例如: Pi is `r pi`. Pi printed is `r print(pi, digits = 2)`. Pi rounded is `r round(pi,2)`. 编织时产生以下效果: 圆周率是3.1415927。圆周率是印刷的。圆周率为3.14 使用print的第二条语句不包括计算。如您所见

我正在进行一个将knitr项目转换为HTML(此时)。我试图使用
print(x,digits=2)
功能控制数字打印,该功能在控制台中运行良好。然而,当我编织降价时,它不会产生任何内联内容。例如:

Pi is `r pi`.
Pi printed is `r print(pi, digits = 2)`.
Pi rounded is `r round(pi,2)`.
编织时产生以下效果:

圆周率是3.1415927。圆周率是印刷的。圆周率为3.14

使用
print
的第二条语句不包括计算。如您所见,我的解决方案是使用
round
,但我想知道为什么会发生这种情况,或者这是否是预期的行为。另一个解决方案是在代码块中使用
选项(scipen=0,digits=2)
(如on),但我只想控制输出的特定部分

类似的,未回答的问题:

中解释了
print()
不起作用的原因。此外,请注意,
print(x)
通常返回
invisible(x)
,因此传递给knitr的实际值仍然是
x
,并且
数字=2
没有意义
print()
通常仅用于其副作用(在控制台/终端中打印),并且不会修改传递给它的值。总而言之:

  • 打印(x)
    返回
    不可见(x)
    ,因此knitr忽略它
  • print(x,digits=2)
    不会将
    x
    四舍五入作为其返回值,因此无法通过
    print()
    获得所需的位数

  • round()
    formatC()
    sprintf()
    都是格式化数字的正确方法。

    这可能与
    print
    返回
    NULL
    对象有关。可能
    knitr
    需要返回一个实际对象,并执行它自己的内部打印。也许
    formatC(pi,digits=3)
    sprintf(“%0.2f”,pi)
    就足够了?谷歌搜索到:@J\F这证实了lmo所说的。对于我的情况,我不能简单地删除print命令,但是一些替代函数可以工作。