编写程序,从常用的生物信息学数据库中(如NCBI、TCGA等)批量下载数据。
内容集成自网络,部分经调试修改后发布
library(RCurl)
library(stringr)
library(XML)
library(clusterProfiler)
library(org.equ.eg.db)
setwd("D:/Ubuntu新++共享文件夹")#此处应为目标文件夹
rm(list=ls())
# 读入基因列表:
ENSEMBL<-read.table("hubgene.txt",sep="\t",header=1,row.names = 1)#存在列名时,header=TRUE,无列名时,header=F
# 提取每行中第十个字母以后的内容并删除提取后行内容为空的行
for (i in 1:nrow(countData)) {
temp <- substr(as.character(ENSEMBL[i, ]), 1, 18)
if (nchar(temp) > 0) {
ENSEMBL[i, ] <- temp
} else {
ENSEMBL[i, ] <- NA
}
}
# 删除包含NA的行
genes <- na.omit(ENSEMBL)
#将ENSEMBL数据转换为Gene ID(如果原数据是ENSEMBL的话)
genes <- bitr(geneID = genes$x,
fromType = "ENSEMBL",
toType = "ENTREZID",
OrgDb = org.equ.eg.db)#org.equ.eg.db为事先建立好的基因信息文件,模式动物可以直接获取,非模式动物需要自行建立。
# 网址数据框:
genes$NCBI_url <- paste("https://www.ncbi.nlm.nih.gov/gene/",genes$ENTREZID,sep="")
head(genes)
# 根据xpath获取节点内容:
getNodesTxt <- function(html_txt1,xpath_p){
els1 = getNodeSet(html_txt1, xpath_p)
# 获得Node的内容,并且去除空字符:
els1_txt <- sapply(els1,xmlValue)[!(sapply(els1,xmlValue)=="")]
# 去除\n:
str_replace_all(els1_txt,"(\\n )+","")
}
# 处理节点格式,为character且长度为0的赋值为NA:
dealNodeTxt <- function(NodeTxt){
ifelse(is.character(NodeTxt)==T && length(NodeTxt)!=0 , NodeTxt , NA)
}
library(RCurl)
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))
opts<-list(ssl.verifypeer=FALSE)
for(i in 1:nrow(genes)){
# 获得网址:
doc <- getURL(genes[i,"NCBI_url"], cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"), ssl.verifypeer = FALSE)
#此处getURL函数中使用的证书文件为默认地址,需要视情况
cat("成功获得网页!\t")
# 获得网页内容
html_txt1 = htmlParse(doc, asText = TRUE)
# 获得Full Name:
genes[i,"FullName"] <- dealNodeTxt(getNodesTxt(html_txt1,'//*[@id="summaryDl"]/dd[2]/text()'))
cat("写入基因\t")
# 获得HGNC ID:
genes[i,"HGNC_ID"] <- str_replace_all(dealNodeTxt(getNodesTxt(html_txt1,'//*[@id="summaryDl"]/dd[3]/a')),"HGNC|:","")
cat("写入HGNC_ID\t")
# 获得Gene type:
genes[i,"GeneType"] <- dealNodeTxt(getNodesTxt(html_txt1,'//*[@id="summaryDl"]/dd[5]/text()'))
cat("写入GeneType\t")
# 获得summary:
genes[i,"Summary"] <- ifelse(length(getNodesTxt(html_txt1,'//*[@id="summaryDl"]/dd[10]/text()'))!=0,getNodesTxt(html_txt1,'//*[@id="summaryDl"]/dd[10]/text()'),NA)
cat("写入Summary\n")
print(paste("完成第",i,"个了!"))
}
本文介绍了一段R代码,通过RCurl库抓取NCBI网站上的基因信息,包括FullName、HGNC_ID、GeneType和Summary,用于从常见的生物数据库中批量下载和处理数据。
2358

被折叠的 条评论
为什么被折叠?



