在 Rmd YAML 中将 `list.files()` 用于书目字段
Using `list.files()` for bibliography field in Rmd YAML
我需要一些帮助来使用 list.files()
函数自动列出 ../bib
目录中 Rmd YAML 中参考文献字段的所有 *.bib 文件。
我在 ../bib 目录中有三个 bib 文件("a.bib"、"b.bib"、"c.bib")。
无需在 YAML 的参考书目字段中手动输入每个文件名,我想自动解析每个 bib 文件名及其字段的相对路径,这样我只需在 "bib" 目录中添加更多 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"]
您似乎在使用单引号来指示 YAML 中的可执行 R 代码 header,但我尝试过的任何方法似乎都不起作用。这可能是不可能的...
与其尝试执行引用 YAML header 中每个 .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 header 更改为如下所示:
bibliography: D:\Documents\R\Whosebug\bib\bibliography.bib
我需要一些帮助来使用 list.files()
函数自动列出 ../bib
目录中 Rmd YAML 中参考文献字段的所有 *.bib 文件。
我在 ../bib 目录中有三个 bib 文件("a.bib"、"b.bib"、"c.bib")。 无需在 YAML 的参考书目字段中手动输入每个文件名,我想自动解析每个 bib 文件名及其字段的相对路径,这样我只需在 "bib" 目录中添加更多 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"]
您似乎在使用单引号来指示 YAML 中的可执行 R 代码 header,但我尝试过的任何方法似乎都不起作用。这可能是不可能的...
与其尝试执行引用 YAML header 中每个 .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 header 更改为如下所示:
bibliography: D:\Documents\R\Whosebug\bib\bibliography.bib