Je suis en cours d'exécution de cette fonction:L'utilisation TryCatch dans les plyr
require(XML)
require(plyr)
getKeyStats_xpath <- function(symbol) {
yahoo.URL <- "http://finance.yahoo.com/q/ks?s="
html_text <- htmlParse(paste(yahoo.URL, symbol, sep = ""), encoding="UTF-8")
#search for <td> nodes anywhere that have class 'yfnc_tablehead1'
nodes <- getNodeSet(html_text, "/*//td[@class='yfnc_tablehead1']")
if(length(nodes) > 0) {
measures <- sapply(nodes, xmlValue)
#Clean up the column name
measures <- gsub(" *[0-9]*:", "", gsub(" \\(.*?\\)[0-9]*:","", measures))
#Remove dups
dups <- which(duplicated(measures))
#print(dups)
for(i in 1:length(dups))
measures[dups[i]] = paste(measures[dups[i]], i, sep=" ")
#use siblings function to get value
values <- sapply(nodes, function(x) xmlValue(getSibling(x)))
df <- data.frame(t(values))
colnames(df) <- measures
return(df)
} else {
break
}
}
Tant que la page existe, il fonctionne très bien. Cependant, si l'un de mes téléscripteurs ne dispose pas de données sur cette URL, il renvoie une erreur:
Error in FUN(X[[3L]], ...) : no loop for break/next, jumping to top level
J'ai ajouté une trace aussi, et les choses se décomposent sur le numéro de ticker 3.
tickers <- c("QLTI",
"RARE",
"RCPT",
"RDUS",
"REGN",
"RGEN",
"RGLS")
tryCatch({
stats <- ldply(tickers, getKeyStats_xpath)
}, finally={})
Je voudrais appeler la fonction comme ceci:
stats <- ldply(tickers, getKeyStats_xpath)
rownames(stats) <- tickers
write.csv(t(stats), "FinancialStats_updated.csv",row.names=TRUE)
en fait, si un téléscripteur n'a pas de données, je veux sauter.
Quelqu'un peut-il m'aider s'il vous plaît pour que cela fonctionne?
Ecrit un wrapper pour 'getKeyStats_xpath' qui l'enferme dans' tryCatch'. vous pouvez le faire dans 'ldply' avec une fonction anonyme, par exemple' ldply (tickers, fonction (t) tryCatch (getKeyStats_xpath (t), finally = {})) ' – jaimedash
Copie possible de [Comment écrire trycatch dans R] (http://stackoverflow.com/questions/12193779/how-to-write-trycatch-in-r) – nrussell