如何模块化kable函数的输出?

时间:2017-05-09 21:50:31

标签: r knitr r-markdown

我想创建一个模块,将表格编织为pdf,用于不同级别的变量。对于指定的每个值,最终输出应该是一个不同的表。

例如,从数据集iris,变量Species的值为c("setosa", "versicolor", "virginica"

我可以使用下面的代码为setosa生成一个表:

    library(knitr)
    library(dplyr)
    g <- 'setosa'
    iris %>% filter(Species==g) %>% 
summarise(avg=mean(Sepal.Width)) %>% 
kable(caption=paste('Results for',g))

但是我想通过传递值向量来打印输出(即setosa,versicolor和virginica)来提高效率。 我知道在这种情况下我可以按Species分组,但我的原始代码有更广泛的输出,我宁愿将它打印到不同的表中。

1 个答案:

答案 0 :(得分:0)

您可以创建一个函数并循环遍历向量:

library(purrr)
print_kable <- function(species) {
        iris %>% filter(Species == species) %>% 
            summarise(avg=mean(Sepal.Width)) %>% 
            kable(caption=paste('Results for', species)) %>% 
            print()
        }

walk(.x = c("setosa", "versicolor", "virginica"), print_kable)

修改

对于降价文档,代码块应如下所示:

```{r results='asis'}
library(dplyr)
library(knitr)
library(purrr)
print_kable <- function(species) {
        iris %>% filter(Species == species) %>% 
            summarise(avg=mean(Sepal.Width)) %>% 
            kable(caption=paste('Results for', species)) %>% print()
}
walk(c("setosa", "versicolor", "virginica"), print_kable)
```