Я хотел бы применить петлю для очистки данных от нескольких веб-страниц в R. Я могу очистить данные для одной веб-страницы, однако, когда я пытаюсь использовать цикл для нескольких страниц, я получаю разочаровывающую ошибку. Я провел много времени, но безрезультатно. Любая помощь будет принята с благодарностью!Как я могу использовать цикл для очистки данных веб-сайта для нескольких веб-страниц в R?
Это работает:
###########################
# GET COUNTRY DATA
###########################
library("rvest")
site <- paste("http://www.countryreports.org/country/","Norway",".htm", sep="")
site <- html(site)
stats<-
data.frame(names =site %>% html_nodes(xpath="//*/td[1]") %>% html_text() ,
facts =site %>% html_nodes(xpath="//*/td[2]") %>% html_text() ,
stringsAsFactors=FALSE)
stats$country <- "Norway"
stats$names <- gsub('[\r\n\t]', '', stats$names)
stats$facts <- gsub('[\r\n\t]', '', stats$facts)
View(stats)
Однако, когда я пытаюсь написать это в цикле, я получаю сообщение об ошибке
###########################
# ATTEMPT IN A LOOP
###########################
country<-c("Norway","Sweden","Finland","France","Greece","Italy","Spain")
for(i in country){
site <- paste("http://www.countryreports.org/country/",country,".htm", sep="")
site <- html(site)
stats<-
data.frame(names =site %>% html_nodes(xpath="//*/td[1]") %>% html_text() ,
facts =site %>% html_nodes(xpath="//*/td[2]") %>% html_text() ,
stringsAsFactors=FALSE)
stats$country <- country
stats$names <- gsub('[\r\n\t]', '', stats$names)
stats$facts <- gsub('[\r\n\t]', '', stats$facts)
stats<-rbind(stats,stats)
stats<-stats[!duplicated(stats),]
}
Ошибка:
Error: length(url) == 1 is not TRUE
In addition: Warning message:
In if (grepl("^http", x)) { :
the condition has length > 1 and only the first element will be used
Такой же результат здесь. Я пробовал этот код и получал то же сообщение об ошибке даже в не-петле, который сработал! > длина (сайт) [1] 7 > stopifnot (длина (сайт) == 1) Ошибка: длина (сайт) == 1 не TRUE – lawyeR
На этой строке: 'site <- paste (" http://www.countryreports.org/country/",country,".htm ", sep =" ")' вы используете 'country', который в версии цикла представляет собой символьный вектор со всеми вашими странами. Вероятно, вы хотите «i», который является одним из элементов вашего вектора страны. – zelite
zelite - это достало меня гораздо ближе - спасибо. –