Jos*_*ien 13
在knitr
,内联钩子可用于处理\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)
Run Code Online (Sandbox Code Playgroud)
首先,您可能希望使用formatC
而不是round
获得两位数,即使它们为零.在Sweave中没有很好的方法可以做到这一点; 最好的选择可能只是创建一个具有短名称的新功能,以实现您想要的格式化; 就像是
p <- function(x) {formatC(x, format="f", digits=2)}
Run Code Online (Sandbox Code Playgroud)
这至少节省了一点点打字:
The answer is $\Sexpr{p(x)}$.
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果没有与新的Sweave驱动程序混淆,我认为还有其他任何事情要做(也许这是尝试的另一个原因knitr
,这似乎正在迅速发展).Sweave在你的Sexpr
语句中的内容上执行此操作,然后用Sexpr
结果替换调用.
as.character(eval(parse(text = cmd), envir = .GlobalEnv))
Run Code Online (Sandbox Code Playgroud)
但是,你不能只写一个新版本as.character
; 除了可能以其他意外方式改变行为的问题之外,由于命名空间,base
即使全局环境中存在另一个版本,它也总是调用该版本.