在Rmd YAML

时间:2019-01-20 15:07:31

标签: r knitr

我需要一些帮助,以使用../bib函数自动列出Rmd YAML中书目字段的list.files()目录中的所有* .bib文件。

../ bib目录中有三个bib文件(“ a.bib”,“ b.bib”,“ c.bib”)。 无需在YAML的书目字段中手动键入每个文件名,我想自动解析每个围嘴文件名及其字段的相对路径,这样我就可以在需要时仅在“ bib”目录中添加更多围嘴文件。更多参考。 我已经尝试过一些可能的代码,如下所示;但是,它失败了。任何帮助将不胜感激。

---
title: "Test Document"
output: pdf_document
bibliography: ['`r paste0("bib/", list.files("bib", pattern = "(*.bib)$"))`']
---


# Intro

This is test.

我希望YAML中的bibliography字段填充现有的* .bib文件名列表(及其相对路径),如下所示:

bibliography: ["bib/a.bib", "bib/b.bib", "bib/c.bib"]

1 个答案:

答案 0 :(得分:1)

您似乎可以使用单引号指示YAML标头中的可执行R代码,但是我尝试过的任何方法似乎都无效。这可能是不可能的...

为什么不创建一个引用YAML标头中每个.bib文件的表达式,而是为什么不创建一个新的合并书目。

要创建合并书目,可以使用bib2df软件包。

尝试以下代码:

# Load the bib2df library.
library(bib2df)

# Set path to .bib files. 
bib_path <- paste0(getwd(),"/bib")

# Create vector of all .bib files. 
bib_refs <- list.files(path=bib_path,pattern = ".bib")

# Create an empty list for storing bib data frames. 
bibs_list <- list()

# Loop through bib_refs and store as df in bibs_list
for (i in 1:length(bib_refs)){
  ref_path <- paste0(bib_path,"/",bib_refs[i])
  bibs_list[[i]] <- bib2df(ref_path)
  }

# bind dfs in list.
bibs_df <- do.call(rbind,bibs_list)

# Create new merged bibliography
df2bib(bibs_df, file = paste0(bib_path,"/","bibliography.bib"))

现在,您可能需要指定.bib文件的路径,该路径与呈现.R或.Rmd文件的工作目录不同。为此,我将YAML标头更改为:

bibliography: D:\\Documents\\R\\StackOverflow\\bib\\bibliography.bib