如何打开PubMed格式.nbib文件?rbibutils报错求助
解决ERIC导出.nbib文件转成tibble/dataframe的问题
修复rbibutils的报错问题
你遇到的length(list(...)) == 0 is not TRUE错误,是因为readBib函数的参数传递不符合要求。可以尝试简化调用代码,去掉可能不兼容的参数:
library(tidyverse) library(rbibutils) # 简化参数调用 bib_data <- readBib(file = "data/screening/fridayTest.nbib", informat = "nbib") # 将bibentry对象转为tibble bib_tibble <- as_tibble(as.data.frame(bib_data))
如果仍然报错,可尝试去掉encoding参数让函数自动检测,或指定encoding = "latin1"(ERIC导出的文件常用此编码)。
替代方案:使用bib2df包
bib2df包专门用于将各类BibTeX/MEDLINE格式文件转换为dataframe,操作更简洁:
# 首次使用需安装包 install.packages("bib2df") library(bib2df) # 读取nbib文件并转为dataframe bib_df <- bib2df("data/screening/fridayTest.nbib", format = "MEDLINE") # 转为tibble格式 bib_tibble <- as_tibble(bib_df)
手动解析方案(适配特殊格式)
如果上述包无法处理,可通过readLines读取文件后手动提取字段:
# 读取文件内容 nbib_content <- readLines("data/screening/fridayTest.nbib", encoding = "UTF-8") # 按空行分割不同条目(MEDLINE格式的条目分隔规则) entries <- split(nbib_content, cumsum(nbib_content == "")) # 定义单个条目的解析函数 parse_entry <- function(entry) { entry <- entry[entry != ""] # 提取字段名和对应值 keys <- gsub("^(\\w+)-.*", "\\1", entry) values <- gsub("^\\w+-\\s*(.*)", "\\1", entry) as_tibble(as.list(setNames(values, keys))) } # 合并所有条目为最终tibble final_tibble <- map_dfr(entries, parse_entry)
内容的提问来源于stack exchange,提问作者Larissa Cury
相关产品推荐
相关产品推荐

