[問題] R 關於例外處理
[問題敘述]:
我想請問,有辦法程式碼執行到某一行,發生錯誤,
然後我想略過這個錯誤,繼續執行或是再執行一次這一行程式碼嗎?
因為目前遇到的狀況是,同樣的參數,有時會有錯誤訊息,
有時沒有,所以我想當錯誤發生時,略過他。
以下是出現錯誤時的錯誤訊息:
錯誤在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)
推
04/04 22:26, , 1F
04/04 22:26, 1F
討論串 (同標題文章)
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章