Использование `list.files ()` для поля библиографии в Rmd YAML - PullRequest
0 голосов
/ 20 января 2019

Мне нужна помощь, чтобы автоматически перечислить все файлы * .bib в каталоге ../bib для поля библиографии в Rmd YAML с использованием функции list.files().

У меня есть три файла нагрудника ("a.bib","b.bib", "c.bib") в каталоге ../bib.Без необходимости вручную вводить каждое имя файла в поле библиографии YAML, я хотел бы автоматически анализировать каждое имя файла нагрудника с его относительным путем для поля, так что я просто добавляю больше файлов нагрудника в каталог "нагрудник" всякий раз, когда мне нужнобольше ссылок.Я попробовал некоторый возможный код как ниже;Однако это не удалось.Любая помощь будет принята с благодарностью.

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


# Intro

This is test.

Я бы хотел, чтобы поле bibliography в YAML было заполнено существующим списком имен файлов * .bib (с их относительным путем) следующим образом:

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

1 Ответ

0 голосов
/ 20 января 2019

Похоже, вы идете по пути использования одинарных кавычек для обозначения исполняемого кода R в заголовке YAML, но, похоже, ничего из того, что я пробовал, не работает.Это может быть невозможно ...

Вместо того, чтобы пытаться выполнить выражение, которое ссылается на каждый файл .bib в заголовке YAML, почему бы не создать новую объединенную библиографию.

Для создания объединенной библиографии вы можете использовать пакет 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
...