Преобразование объекта класса Bibtex в набор текстовых строк, отформатированных для каждой ссылки

#r #bibtex

#r #bibtex

Вопрос:

Я новичок в объектах BibTeX и хочу сгенерировать список текстовых строк для каждой ссылки в объекте в виде отформатированной ссылки. Я не хочу создавать документ — эти строки будут использоваться для последующей цели в R. Есть ли способ сделать это? Я даже не могу понять, как получить доступ к фрагментам каждой ссылки в объекте BibTeX.

Другими словами, как я могу превратить это:

    temp <- toBibtex(c(citation("base"), citation("sp")))
  

в это:

   [[1]]
  [1] "R Core Team (2019). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/."

  [[2]]
  [1] "Pebesma, E.J., R.S. Bivand (2005). Classes and methods for spatial data in R. R News 5. https://cran.r-project.org/doc/Rnews/."

  [[3]]
  [1] "Bivand, R.S., Pebesma, E.J., Gomez-Rubio, V. (2013). Applied spatial data analysis with R, Second edition. Springer, NY. https://asdar-book.org/."
  

Помогите?

Комментарии:

1. Спасибо @zx8754 и @agila за ваши ответы. Оба варианта идеально подходят и работоспособны. В этом случае я выбрал @zx8754, потому что я хотел больше контроля над форматированием ссылки, чем $textVersion это дает мне. Мне очень нравится, что элемент управления bib2df() позволяет вам управлять форматированием, я просто хотел бы, чтобы мне не приходилось сначала записывать .bib-файл на диск. Ну и ладно.

2. Добавлено немного больше из пакета RefmanageR, я думаю, что это тот пакет, который вам нужно изучить, он не требует чтения из файла bib, см., Например, Мой ответ.

3. Еще одно продолжение этой саги — по-видимому bibtex , потеряно и было заархивировано, и RefManageR его ждет аналогичная судьба. Вернемся к чертежной доске!

Ответ №1:

Использование пакета bib2df:

 library(bibtex)
library(bib2df)

write.bib(c("base", "sp"), "temp.bib")

x <- bib2df("temp.bib")

apply(x, 1, function(i){
  paste(
    #adding authors and titles
    paste(unlist(i$AUTHOR), collapse = ", "),
    i$TITLE,
    # add other bits here as needed
    sep = ", ")
})

# [1] "R Core Team, R: A Language and Environment for Statistical Computing"                                        
# [2] "Edzer J. Pebesma, Roger S. Bivand, Classes and methods for spatial data in {R"                               
# [3] "Roger S. Bivand, Edzer Pebesma, Virgilio Gomez-Rubio, Applied spatial data analysis with {R}, Second edition"
  

Примечание: я тоже новичок в bibtex. Существует также пакет RefManageR, который может быть более полезным.


Использование RefManageR:

 library(RefManageR)

# read bib file
x1 <- ReadBib("temp.bib")
# or convert citations to bibentry object
x2 <- as.BibEntry(c(citation("base"), citation("sp")))
  

Оба будут напечатаны, как показано ниже:

 # [1] R. S. Bivand, E. Pebesma, and V. Gomez-Rubio. _Applied spatial data analysis with R, Second
# edition_. Springer, NY, 2013. <URL: https://asdar-book.org/>.
# 
# [2] E. J. Pebesma and R. S. Bivand. “Classes and methods for spatial data in R”. In: _R News_ 5.2 (Nov.
#                                                                                                    2005), pp. 9-13. <URL: https://CRAN.R-project.org/doc/Rnews/>.
# [3] R Core Team. _R: A Language and Environment for Statistical Computing_. R Foundation for
# Statistical Computing. Vienna, Austria, 2019. <URL: https://www.R-project.org/>.
  

Ответ №2:

Я думаю, вы можете применить что-то вроде следующего кода:

 pkgs <- c("base", "sp")
lapply(pkgs, function(x) citation(x)$textVersion)
#> [[1]]
#> [1] "R Core Team (2020). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/."
#> 
#> [[2]]
#> [[2]][[1]]
#> [1] "Pebesma, E.J., R.S. Bivand, 2005. Classes and methods for spatial data in R. R News 5 (2), https://cran.r-project.org/doc/Rnews/."
#> 
#> [[2]][[2]]
#> [1] "Roger S. Bivand, Edzer Pebesma, Virgilio Gomez-Rubio, 2013. Applied spatial data analysis with R, Second edition. Springer, NY. https://asdar-book.org/"
  

или, если вам нужна ровно 1 ссылка на каждый элемент списка, я думаю, вы можете запустить:

 as.list(unlist(lapply(pkgs, function(x) citation(x)$textVersion)))
#> [[1]]
#> [1] "R Core Team (2020). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/."
#> 
#> [[2]]
#> [1] "Pebesma, E.J., R.S. Bivand, 2005. Classes and methods for spatial data in R. R News 5 (2), https://cran.r-project.org/doc/Rnews/."
#> 
#> [[3]]
#> [1] "Roger S. Bivand, Edzer Pebesma, Virgilio Gomez-Rubio, 2013. Applied spatial data analysis with R, Second edition. Springer, NY. https://asdar-book.org/"
  

Создано 2020-09-30 пакетом reprex (версия 0.3.0)

Комментарии:

1. Не обязательно bib объекты конкретно, но формат $textVersion ссылок сильно различается. Я хочу иметь возможность переформатировать цитаты, чтобы сделать их единообразными.