#r
#r
Вопрос:
Я хотел бы просмотреть все сезоны с 2003-2004 по 2019-2020 годы голландской футбольной лиги, включая 34 игровых раунда (я использую этот веб-сайт https://www.voetbal.com/wedstrijdgegevens/ned-eredivisie-2003-2004-spieltag /). Как вы можете видеть в моем коде, он показывает мне только результаты прошлого сезона. Я думаю, что он перезаписывает другие сезоны. Что я делаю не так? Что я должен добавить в свой код? Кто-нибудь может мне помочь?
Вот код, который я использую:
library(tidyverse)
library(dplyr)
library(ggplot2)
library(caret)
library(rvest)
library(devtools)
library(httr)
library(tidyr)
library(tibble)
library(xml2)
library(tidyr)
library(stringr)
url <- sprintf("https://www.voetbal.com/wedstrijdgegevens/ned-eredivisie-%d-%d-spieltag/", 2003:2019, 2004:2020)
basis<-function(url){
website <- read_html(url)
Sys.sleep(2)
datum <- website %>%
html_nodes(".data .standard_tabelle td[nowrap]:nth-of-type(1)") %>%
html_text()
tijdstip <- website %>%
html_nodes(".data .standard_tabelle td[nowrap]:nth-of-type(2)") %>%
html_text()
thuisclub <- website %>%
html_nodes(".data .standard_tabelle [align='right'] a") %>%
html_text()
uitclub <- website %>%
html_nodes(".standard_tabelle td:nth-of-type(5) a") %>%
html_text()
uitslag <- website %>%
html_nodes(".data .standard_tabelle td[nowrap]:nth-of-type(6)") %>%
html_text()
return(tibble(datum=datum, tijdstip=tijdstip, thuisclub=thuisclub, uitclub=uitclub, uitslag=uitslag))
}
overige_seizoenen<-function(url){
for (i in 1:17){
list_of_pages<-str_c(url[[i]], 1:34)
table <-list_of_pages%>%
map(basis)%>%
bind_rows()
}
return(table)
}
jochem <- overige_seizoenen(url)
```
Комментарии:
1. циклы for всегда сохраняют только последнюю запись. есть несколько способов обойти это. одной из возможностей было бы сохранить / добавить каждый результат во внешнюю / глобальную переменную, такую как пустой data.frame. вы также можете использовать готовый пакет «magicfor», который сохраняет каждую итерацию цикла for.
2. Упростите свой пример, нужны ли нам все эти пакеты?
Ответ №1:
Я подозреваю, что в цикле есть ошибка for
. В R, если вы хотите, чтобы цикл повторялся от элемента 1 до 10, вы не можете просто сказать for (i in 10)
, вы должны уточнить это как for (i in 1:10)
. Итак, попробуйте этот цикл сейчас:
for (i in 1:seizoenen){
list_of_pages<-str_c(url[[i]], 1:34)
table <-list_of_pages%>%
map(basis)%>%
bind_rows()
}
return(table)
}
Комментарии:
1. моя ошибка, «seizoenen» была неправильной. В моем коде было значение 1: 17. Я изменил его. Но все же у меня есть только последний результат.