作者ckkt (!@#$)
看板R_Language
标题[问题] R 关於例外处理
时间Thu Apr 4 22:10:57 2013
[问题叙述]:
我想请问,有办法程式码执行到某一行,发生错误,
然後我想略过这个错误,继续执行或是再执行一次这一行程式码吗?
因为目前遇到的状况是,同样的参数,有时会有错误讯息,
有时没有,所以我想当错误发生时,略过他。
以下是出现错误时的错误讯息:
错误在UseMethod("xmlNamespaceDefinitions") :
没有适用的方法可将 'xmlNamespaceDefinitions' 套用到 "NULL" 类别的物件
[程式范例]:
get.ppiNCBI <- function(g.n) {
require(XML)
ppi <- data.frame()
for(i in 1:length(g.n)){
o <- htmlParse(paste("
http://www.ncbi.nlm.nih.gov/gene/", g.n[i], sep=''))
exist <- length(getNodeSet(o, "//table//th[@id='inter-prod']"))>0
if(exist){
p <- getNodeSet(o, "//table")
for(j in 1:length(p)){
int <- readHTMLTable(p[[j]])
if(colnames(int)[2]=="Interactant"){break}
}
ppi <- rbind(ppi, data.frame(egID=g.n[i], intSymbol=int$`Other Gene`))
}
Sys.sleep(1)
}
if(dim(ppi)[1]>0){
ppi <- unique(ppi)
##print(paste(dim(ppi)[1], "interactions found"))
return(ppi)
} else{
##print("No interaction found")
return(ppi)
}
}
intergene <- function(genelist, number){
numberofgene <- length(genelist)
ppimatrix <- matrix(0, nrow=numberofgene, ncol=1)
names(ppimatrix) <- genelist
egSYM <- org.Hs.egSYMBOL
mapped_genes <- mappedkeys(egSYM)
egSYMlist <- as.list(egSYM[mapped_genes])
print(0)
Symin <- levels(get.ppiNCBI(genelist[[number]])[1,2])
print(1)
numberofinter <- length(Symin)
if(numberofinter > 0){
enIDin <- matrix(NA, nrow=1, ncol=numberofinter)
print(2)
for(k in 1:numberofinter){
position <- match(Symin[k], egSYMlist)
enname <- attributes(egSYMlist[position])
enIDin[k] <- enname[[1]]
}
for(j in 1:numberofgene){
if(!is.na(match(genelist[[j]], enIDin)))
ppimatrix[j] <- 1
}
}
return(ppimatrix)
}
在执行xy <- intergene(EID[,2], 8) 或intergene(EID[,2], 7)
时会出现错误讯息
EID[,2]的资料型态为c("9890","5010",.........)
7和8是EID[7,2],EID[8,2]的意思
错误会出现在print(0)和print(1)之间那一行程式
因为有时会错误,有时不会,所以有办法忽略错误,继续执行吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.165.47.221
※ 编辑: ckkt 来自: 1.165.47.221 (04/04 22:19)
1F:推 ching0629:建议你看一下 help(try) 应该能满足你的问题 04/04 22:26