我希望更多地使用R markdown来执行分析并生成输出。也许我错过了一些简单的东西,但我只想设置小数位数来显示2位或3位数,具体取决于输出(例如t-statistic vs p-value)。
我之前使用的是r options(digits=2)
,它一直有效,直到您想要包含的最后一个数字为0.我已经使用sprintf函数解决了这个问题,但必须为每个数字指定。
有没有办法设置全球' sprintf选项,以便对于所有后续数字,显示相同数量的小数位?
谢谢,
保
答案 0 :(得分:2)
我不知道设置全局选项的方法(尽管可能有一个)。但是你可以编写一个便利输出函数来减少输入量。例如,将此函数放在文档的开头:
op = function(x, d=2) sprintf(paste0("%1.",d,"f"), x)
然后,在文档的后面,当您想输出数字时,您可以执行以下操作:
op(mtcars$mpg)
或者,如果你想要3个数字而不是默认的2个数字,你可以这样做:
op(mtcars$mpg, 3)
答案 1 :(得分:0)
使用knitr
内联钩子(钩子是knitr
的隐藏宝石)来定义内联代码输出的格式是可行的。
示例#1
使用此Rmd
文件,可以在所有内联代码中使用sprintf()
来控制小数位数:
---
title: "Use an inline hook"
---
```{r setup, include=FALSE}
# Register an inline hook:
knitr::knit_hooks$set(inline = function(x) {
x <- sprintf("%1.2f", x)
paste(x, collapse = ", ")
})
```
Now, get 3.14 with just writing `r pi`.
示例#2
想要在报告的某些部分更改内联输出格式吗?
这个Rmd
文件完成了这项工作:
---
title: "Use a closure and an inline hook"
---
```{r setup, include=FALSE}
# Register an inline hook
knitr::knit_hooks$set(inline = function(x) {
paste(custom_print(x), collapse = ", ")
})
# Define a function factory (from @eipi10 answer)
op <- function(d = 2) {
function(x) sprintf(paste0("%1.", d, "f"), x)
}
# Use a closure
custom_print <- op()
```
Now, get 3.14 with `r pi`...
```{r three-decimals, include=FALSE}
custom_print <- op(d = 3)
```
...and now 3.142 with `r pi`.
```{r more-decimals, include=FALSE}
custom_print <- op(d = 10)
```
Finally, get 3.1415926536 with `r pi`.
示例#3
想要显示t-statistic和p-value的不同格式?
可以在此Rmd
文件中使用S3对象和内联挂钩:
---
title: "Use S3 methods and an inline hook"
---
```{r setup, include=FALSE}
# Register an inline hook
knitr::knit_hooks$set(inline = function(x) {
paste(custom_print(x), collapse = ", ")
})
# Define a generic
custom_print <- function(x, ...) {
UseMethod("custom_print", x)
}
# Define a method for p-values
custom_print.p.value <- function(x, ...) paste(sprintf("%1.2f", x), collapse = ", ")
# Define a method for t-statistics
custom_print.t.stat <- function(x, ...) paste(sprintf("%1.1f", x), collapse = ", ")
```
Estimate models...
```{r fake-results, include=FALSE}
t <- c(2.581, -1.897)
class(t) <- "t.stat"
p <- c(0.025, 0.745)
class(p) <- "p.value"
```
Want to show T-stats: `r t` (get 2.6, -1.9).
And p-values: `r p` (get 0.03, 0.74).
谁说knitr
是一个很棒的套餐?
答案 2 :(得分:0)
在 Yihui 的教程 here 中发现,这是我在我的 Rmd
文件中成功实现它的方式。
{r setup, include=FALSE, cache=FALSE}
options(scipen = 1, digits = 2) #set to two decimal