最近,在科研狗网站看到了一个有趣的项目,使用R语言读取pubmed存入mysql数据库,之前报名没有报上,还是决心要跟着做一下,无奈R语言水平比较渣渣,只能复制别人的代码来用,悲剧的是,原代码复制过来还是报错,来一个小目标,把这段代码运行起来。花了两三天的功夫,终于实现了目标。
原代码参考自R科研作图学习小组组长:木萱小主的作业: http://group.keyangou.com/RGraph/topic/952
这个项目的难点在于要用R语言和MySQL数据库,两者都是初学,加大了难度,搞不定R函数。首先这个任务的准备工作是安装数据库和phpmyadmin(当然这只是一个选项,还有好多的图形数据库管理软件,据说大牛都是命令行操作的),这个不表。
主要步骤就是第一,用你要查询的关键词或条件获得pubmed-id,标题和摘要,然后格式化一下,放入数据库。代码如下:
02 | cell2017<-EUtilsSummary("cell[TA] AND 2017[DP]") |
03 | data<-QueryId(cell2017) |
05 | pmids<-paste(data,sep = "",collapse=",") |
11 | r2 <- POST(postFetchUrl,body = list(db='pubmed',id=pmids,retmode='xml')) |
13 | data2=content(r2, "parsed") |
14 | article=xml_children(data2) |
19 | while(cnt<=count){title=xml_find_first(article[cnt],".//ArticleTitle") |
20 | abstract=xml_find_first(article[cnt],".//AbstractText") |
22 | a<-c(a,xml_text(title)) |
24 | b<-c(b,xml_text(abstract)) |
31 | title = gsub("'","",title) |
32 | abstract = gsub("'","",abstract) |
33 | article<-data.frame(pmid,title,abstract) |
34 | con<-dbConnect(MySQL(),host="127.0.0.1",dbname="rdb",user="root",password="") |
35 | dbSendQuery(con,'SET NAMES utf8') |
36 | dbWriteTable(con,"article",article,append=TRUE) |
用另外一种解决方法,不用RISmed包,用httpr包,也能运行,但是到第6行就会报错,只好作罢。不管怎样,上边那个方法是最简单的,用做实际应用足够了。
这里还要补充一下,如果边数据库次数太多而没有关闭会报错,有个哥们定义的函数很有用,一起放这。
02 | killDbConnections <- function () { |
03 | all_cons <- dbListConnections(MySQL()) |
07 | print(paste(length(all_cons), " connections killed.")) |
代码github地址:https://github.com/zd200572/R/blob/master/科研狗
我的博客:https://jiawen.zd200572.com和www.zd200572.com
发现在百度上搜不到,看科学网搜索百优化好,放这试试。
欢迎交流,推销勿扰!
微博@zd200572
微信:Zhaoink 个人公众号:科技记者
https://blog.sciencenet.cn/blog-623545-1103863.html
上一篇:
uBiome肠道微生物报告学习下一篇:
ASA芯片的探索