看板 R_Language 關於我們 聯絡資訊
[問題敘述]: 我想請問,有辦法程式碼執行到某一行,發生錯誤, 然後我想略過這個錯誤,繼續執行或是再執行一次這一行程式碼嗎? 因為目前遇到的狀況是,同樣的參數,有時會有錯誤訊息, 有時沒有,所以我想當錯誤發生時,略過他。 以下是出現錯誤時的錯誤訊息: 錯誤在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)
ching0629:建議你看一下 help(try) 應該能滿足你的問題 04/04 22:26