我正在尝试使用RCurl包从genecard数据库中获取数据
http://www-bimas.cit.nih.gov/cards//
我在之前发布的问题中阅读了一个很棒的解决方案:
How can I use R (Rcurl/XML packages ?!) to scrape this webpage?
但是,我的问题在于我需要经验者进一步支持的形式。而不是从网页上提取所有链接。我脑海中列出了大约1000个基因。它们是基因符号的形式(一些基因符号可以在网页中找到,其中一些是数据库的新内容)。这是我的基因列表的一部分。
TP53 SOD1 EGFR C2D AKT2 NFKB1
C2d不在数据库中,因此,当我手动进行搜索时,我会看到。 “对不起,C2d没有GeneCard。”
当我使用上一个问题中发布的解决方案进行分析时。
How can I use R (Rcurl/XML packages ?!) to scrape this webpage?
(1)我首先阅读列表
(2)然后我使用上一个解决方案中的get_structs函数将列表中的每个基因sybmols替换到以下网站 http://www-bimas.cit.nih.gov/cgi-bin/cards/carddisp.pl?gene=genesybol。
(3)使用上一条消息中的get_data_url函数,废弃列表中每个基因所需的信息。
它适用于TP53,SOD1,EGFR,但是当搜索到C2d时。这个过程停止了。
当我得到~1000个基因时,我确信它们中的一些基因遗漏了。
如何获得修改后的基因列表告诉我~1000个基因,其中一个基因会自动丢失?那么,我可以使用上一个问题中列出的相同方法来获取我需要的所有数据,这些数据基于网页中存在的新基因列表?
或者是否有任何方法要求R跳过这些缺失的项目并连续进行报废直到列表末尾,但在最终结果中标记缺失的项目。
为了促进讨论过程。我使用脚本在前面的问题中使用脚本制作了一个sudo输入文件,用于他们使用的同一个网页。
u <- c ("Aero_pern", "Ppate", "didnotexist", "Sbico")
library(RCurl)
base_url<-"http://gtrnadb.ucsc.edu/" base_html<-getURLContent(base_url)[[1]]
links<-strsplit(base_html,"a href=")[[1]]
get_structs<-function(u) {
struct_url<-paste(base_url,u,"/",u,"-structs.html",sep="")
raw_data<-getURLContent(struct_url)
s_split1<-strsplit(raw_data,"<PRE>")[[1]]
all_data<-s_split1[seq(3,length(s_split1))]
data_list<-lapply(all_data,parse_genomes)
for (d in 1:length(data_list)) {data_list[[d]]<-append(data_list[[d]],u)}
return(data_list)
}
我想这个问题可以通过修改上面的get_structs scripps来解决,或者ifelse函数可能会有所帮助,但我无法弄清楚如何进一步修改它。请评论。
答案 0 :(得分:2)
您可以将函数调用封装在try()
中,以便在出现错误时进程不会中断。通常,这将让您循环查看有问题的案例,它将返回错误消息,而不是破坏您的过程。 e.g。
dat <- list()
for (i in 1:length(u)){
dat[[i]] <- try(get_structs(u[i]))
}