使用摘要从R编写.bib文件

使用摘要从R编写.bib文件,r,bibtex,mendeley,R,Bibtex,Mendeley,我有.bib文件(从科学网下载),我想把它导入到R中,用“考虑”替换所有“根据”的实例,并将其导出为.bib文件。我还没有找到一个函数可以将我的数据写回.bib文件。WriteBib不起作用,因为refs是“pairlist”对象,而不是“bibentry”。关于如何导出可以导入Mendeley的.bib文件,有什么建议吗?谢谢你的帮助 代码如下: library(bibtex) library(RefManageR) refs = do_read_bib("/Users/CarrieAnn/

我有.bib文件(从科学网下载),我想把它导入到R中,用“考虑”替换所有“根据”的实例,并将其导出为.bib文件。我还没有找到一个函数可以将我的数据写回.bib文件。WriteBib不起作用,因为refs是“pairlist”对象,而不是“bibentry”。关于如何导出可以导入Mendeley的.bib文件,有什么建议吗?谢谢你的帮助

代码如下:

library(bibtex)
library(RefManageR)

refs = do_read_bib("/Users/CarrieAnn/Downloads/savedrecs (1).bib", encoding = "unknown", srcfile)

for (i in 1:length(refs)) {
  refs[[i]] = gsub("in light of", "CONSIDERING", refs[[i]])
}

我认为最简单的选择是将.bib文件视为普通文本文件。试试这个:

raw_text  <- readLines("example.bib")
new_text  <- gsub("in light of", "CONSIDERING", raw_text)
writeLines(new_text, con="new_example.bib")
新例bib的输出:

%  a sample bibliography file
%  

@article{small,
author = {Doe, John},
title = {A small paper},
journal = {The journal of small papers},
year = 1997,
volume = {-1},
note = {in light of recent events},
}

@article{big,
author = {Smith, Jane},
title = {A big paper},
journal = {The journal of big papers},
year = 7991,
volume = {MCMXCVII},
note = {in light of what happened},
}
%  a sample bibliography file
%  

@article{small,
author = {Doe, John},
title = {A small paper},
journal = {The journal of small papers},
year = 1997,
volume = {-1},
note = {CONSIDERING recent events},
}

@article{big,
author = {Smith, Jane},
title = {A big paper},
journal = {The journal of big papers},
year = 7991,
volume = {MCMXCVII},
note = {CONSIDERING what happened},
}
一点解释:

BibEntry
对象具有非标准的内部结构,在
RefManageR
包中提供的功能之外很难使用。一旦
unclass
或将
BibEntry
对象缩减为列表,由于对象需要混合字段和属性,因此很难将其恢复为
bib
格式。(更糟糕的是,
bibtex
RefManageR
没有完全相同的内部结构,因此很难从一个上下文转换到另一个上下文。)

尝试这样更改代码(确保使用
read.bib
函数,并在循环中引用要更改的文本出现的字段,例如“note”或“title”。对于@andrew_reece提供的示例文件,其工作方式如下:

refs = read.bib("example.bib", encoding = "unknown", srcfile)

for (i in 1:length(refs)) {
   refs$note[i] = gsub("in light of", "CONSIDERING", refs$note[i])
}

WriteBib(as.BibEntry(refs), "example2.bib")

然而,根据您的任务描述,我同意@andrew_reece的观点,即将bib文件视为纯文本更容易(另一方面,对于较大的bib文件,您实际上可能希望对要替换的字段进行更多控制。)

请澄清,您的问题是关于“摘要”,因此您可能实际上希望在循环中使用
refs$abstract[i]
;如果不是所有记录都有摘要,请尝试循环
(i in seq_on(refs$abstract))