/ / यदि यूआरएल मौजूद नहीं है तो एक लूप में एक मान छोड़ें - आर, वेब-स्क्रैपिंग

यदि यूआरएल मौजूद नहीं है तो आर लूप में वैल्यू छोड़ें - आर, वेब-स्क्रैपिंग

मैं सभी एनबीए बॉक्स को पकड़ने के लिए एक कोड प्राप्त करने की कोशिश कर रहा हूंअक्टूबर के महीने के लिए स्कोर। मैं चाहता हूं कि कोड दिनांक (27-31) और 30 टीमों के संयोजन के लिए हर यूआरएल को आजमाएं। हालांकि, चूंकि सभी टीमें हर दिन खेलती नहीं हैं, कुछ संयोजन "अस्तित्व में नहीं जीते हैं, इसलिए मैं मौजूदा अस्तित्व वाले यूआरएल को छोड़ने के लिए प्रयास समारोह को लागू करने की कोशिश कर रहा हूं, लेकिन मुझे लगता है कि यह नहीं है। मेरे पास यह है अब तक लिखा है:

install.packages("XML")
library(XML)

teams = c("ATL","BKN","BOS","CHA","CHI",
"CLE","DAL","DEN","DET","GS",
"HOU","IND","LAC","LAL","MEM",
"MIA","MIL","MIN","NOP","NYK",
"OKC","ORL","PHI","PHX","POR",
"SAC","SA","TOR","UTA","WSH")

october = c()

for (i in teams){
for (j in (c(27:31))){
url = paste("http://www.basketball-reference.com/boxscores/201510",
j,"0",i,".html",sep = "")
data <- try(readHTMLTable(url, stringsAsFactors = FALSE))

if(inherits(data, "error")) next

away_1 = as.data.frame(data[1])
colnames(away_1) = c("Players","MP","FG","FGA","FG%","3P","3PA","3P%","FT","FTA",
"FT%", "ORB","DRB","TRB","AST","STL","BLK","TO","PF","PTS","+/-")

away_1 = away_1[away_1$Players != "Reserves",]
away_1 = away_1[away_1$MP != "Did Not Play",]

away_1$team = rep(toupper(substr(names(as.data.frame(data[1]))[1],
5, 7)),length(away_1$Players))
away_1$loc = rep(i,length(away_1$Players))

home_1 = as.data.frame(data[3])
colnames(home_1) = c("Players","MP","FG","FGA","FG%","3P","3PA","3P%","FT","FTA",
"FT%", "ORB","DRB","TRB","AST","STL","BLK","TO","PF","PTS","+/-")

home_1 = home_1[home_1$Players != "Reserves",]
home_1 = home_1[home_1$MP != "Did Not Play",]

home_1$team = rep(toupper(substr(names(as.data.frame(data[2]))[1],
5, 7)),length(home_1$Players))
home_1$loc = rep(i,length(home_1$Players))

game = rbind(away_1,home_1)

october = rbind(october, game)
}
}

निम्नलिखित पंक्तियों के ऊपर और नीचे सब कुछ काम करने लगता है:

data <- try(readHTMLTable(url, stringsAsFactors = FALSE))

if(inherits(data, "error")) next

मुझे बस इन दोनों को सही ढंग से प्रारूपित करने की आवश्यकता है।

उत्तर:

जवाब के लिए 0 № 1

उपयोग करने के बारे में कैसे tryCatch त्रुटि प्रबंधन के लिए?

result = tryCatch({
expr
}, warning = function(w) {
warning-handler-code
}, error = function(e) {
error-handler-code
}, finally = {
cleanup-code
})

कहा पे readHTMLTable मुख्य भाग ("expr") के रूप में उपयोग किया जाएगा। अगर त्रुटि / चेतावनी होती है तो आप लापता मूल्य को वापस कर सकते हैं और फिर अंतिम परिणाम पर अनुपलब्ध मानों को छोड़ सकते हैं।


जवाब के लिए 0 № 2

रुचि रखने वाले किसी के लिए, मैंने इसे आरसीआरएल में url.exists का उपयोग करके निकाला। यूआरएल परिभाषा लाइन के बाद बस निम्नलिखित को लागू करें:

if(url.exists(url) == TRUE){...}