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

在R中实现get_CIDname()函数:从PubChem通过CID获取化合物名称

问题

需要编写get_CIDname()函数,将数据框中CID(化合物ID)替换为PubChem数据库对应的化合物主名称。现有包含CID列的数据框示例:

df <- data.frame("Compound" = c(176,29096,6341,8914,5366204,98464,11572,9231,535144,15669393,1738127,1738124), "Value" = rnorm(12, mean = 500000, sd = 600000))

期望新增Match列存储对应名称,已有部分代码但不知如何解析HTML:

get_CIDname <- function(CID){
read_html(paste0("https://pubchem.ncbi.nlm.nih.gov/compound/",
           CID)) 

}

技术说明

你正在做的是**网页抓取(Web Scraping)**中的HTML解析环节,通过定位网页特定元素来提取目标数据。

实现步骤

  1. 依赖包准备:使用rvest包专门做网页解析,先安装加载:
install.packages("rvest")
library(rvest)
library(dplyr)
library(purrr)
  1. 完善解析函数:PubChem页面的化合物主名称对应h1.title-and-breadcrumb__title元素,修改函数提取该内容并添加错误处理:
get_CIDname <- function(CID) {
  # 构造URL并读取页面
  url <- paste0("https://pubchem.ncbi.nlm.nih.gov/compound/", CID)
  page <- tryCatch(read_html(url), error = function(e) return(NA))
  
  if (is.na(page)) {
    return("CID不存在或无法访问")
  }
  
  # 提取主名称
  name <- page %>%
    html_element("h1.title-and-breadcrumb__title") %>%
    html_text(trim = TRUE)
  
  # 处理无结果情况
  if (is.na(name)) {
    return("未找到对应名称")
  } else {
    return(name)
  }
}
  1. 批量处理数据框:用purrr::map批量对CID列调用函数,新增Match列:
df <- df %>%
  mutate(Match = map_chr(Compound, get_CIDname))

运行后即可得到包含化合物名称的结果列,例如CID=176会返回"Acetic Acid",CID=29096返回"Dihydromyrcenol"。

内容的提问来源于stack exchange,提问作者user7264

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:56:04