以编程方式插入带有R markdown的文本,标题和列表

时间:2014-10-27 13:11:19

标签: r markdown

当使用R markdown时如果想要使用代码添加文本,有一些简单的方法可以做到这一点。

对于表也是如此,使用kable命令非常容易。

但是,假设您希望以编程方式在报表中插入标题或列表。

```{r, results='asis'}
headers=list("We","are","your","friends")
for (i in list_a){
    #add i as header
}
```

并且您希望这与在Rmd文件中写入相同:

#We
#are
#your
#friends

另一个例子是自动创建标题而不是列表:

```{r, results='asis'}
list_a=list("We","are","your","friends")
for (i in list_a){
    #print i to a rmd list
}
```

如前所述应该与写作相同:

*We
*are
*your
*friends

这不仅是格式化问题,因为Rmd文件的上下文表是根据这些标题动态创建的。

4 个答案:

答案 0 :(得分:19)

您需要在R中构建所需的markdown,并将其与chunk选项中的参数results = 'asis'一起使用。因此,像下面这样的东西会做你想要的:

```{r, results='asis'}
headers <- list("We","are","your","friends")
for (i in headers){
  cat("#", i, "\n")
}
```

这里的for - 循环将创建输出

# We 
# are 
# your 
# friends 

直接用作.md文档中的输入。

答案 1 :(得分:6)

使用pander package将R对象转换为Pandoc的降价:

> headers=list("We","are","your","friends")
> list_a=list("We","are","your","friends")
> library(pander)
> pandoc.header(headers)

# We

# are

# your

# friends
> pander(list_a)


  * We
  * are
  * your
  * friends

<!-- end of list -->

第一个示例使用helper function创建标题,而第二个示例只使用generic S3 method,可以将各种R对象稳健地转换为markdown。

答案 2 :(得分:0)

对于想要在每个标题下方绘制图表的人,这就是我的方法。

```{r, results="asis"}

for (i in headers){
      cat("# ", i, "\n",
          knitr::knit_child("plot.Rmd", quiet = TRUE), "\n")
    }

```

plot.Rmd中放入您的绘图代码,例如

```{r}
# plotting code
```

答案 3 :(得分:0)

此解决方案对我有用,在R 3.6.3中将.Rmd编译为PDF:

def loop_dir():
   files=[]
   for file in glob.glob('/Users/++++/+++/test/*.mp4'):
       files.append(str(file).split('/')[-1])
   return files