[問題] 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數位生活區 即時熱門文章