【问题标题】:Generating pander tables in a loop in RMarkdown in Rstudio在 Rstudio 的 RMarkdown 中循环生成 pander 表
【发布时间】:2015-07-18 13:01:05
【问题描述】:

我使用类似于下面的 sn-p 的代码生成了一组表:

```{r tables, echo=TRUE, eval=TRUE}
require(reshape2); require(pander)
data("mtcars")
data("AirPassengers")

dta_lst <- list(mtcars, AirPassengers)
for (i in 1:length(dta_lst)) {
    pander(melt(head(dta_lst[[i]], n = 2), varnames = c("Something"), 
            value.name = "Something else"), 
           caption = paste("Some table for: ", class(dta_lst[[i]])))
}
```

当我运行代码时,它会产生所需的输出(当然,提供的示例没有什么意义,在我的正确数据中,我以合理的方式融化数据):

---------------------------
 variable   Something else 
---------- ----------------
   mpg            21       

   mpg            21       

   cyl            6        

   cyl            6        

   disp          160       

   disp          160       

    hp           110       

    hp           110       

   drat          3.9       

   drat          3.9       

    wt           2.62      

    wt          2.875      

   qsec         16.46      

   qsec         17.02      

    vs            0        

    vs            0        

    am            1        

    am            1        

   gear           4        

   gear           4        

   carb           4        

   carb           4        
---------------------------

Table: Some table for:  data.frame


----------------
 Something else 
----------------
      112       

      118       
----------------

Table: Some table for:  ts

当我尝试在 Rstudio 中编写代码时,pander 表不会出现:

当然,没有循环,pander 命令可以正常工作,并生成整齐地编入 HTML 文档的表格。

【问题讨论】:

  • 简而言之,禁用panderOptions 中的knitr.auto.asis 设置并使用knitr 中的results='asis' 块选项。我也会很快提供更详细的答案,在那之前,请参阅此相关主题:github.com/Rapporter/pander/issues/142#issuecomment-66619769
  • @daroczig,非常感谢您的关注。我曾经建议组合,它像宣传的那样工作。在更一般的问题上,panderOptions('knitr.auto.asis', FALSE) 是否会影响 Rmd 文件中其他pander 表区域的处理方式?除了上面描述的循环之外,我在这里和那里使用 pander 来派生一些更标准的表。

标签: r for-loop rstudio knitr pander


【解决方案1】:

在 for 循环中没有“输出屏幕”,除非您使用 print(x) 函数。

for (i in 1:4) { i } 不显示任何内容

for (i in 1:4) {print(i)} 显示数字 1 2 3 和 4

解决方案:在 FOR 循环中构造表(使用 knitt)并将其分配给变量。然后使用print() 函数打印出这个变量。记住。您必须在 var 表前后添加空行:在 print() 中使用粘贴函数

【讨论】:

  • 针对pandoc,需要使用cat而不是print
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多