You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打开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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:01:01