В R Studio, как я могу запретить циклу for перезаписывать сохраненный вывод самым последним выводом? - PullRequest
0 голосов
/ 12 апреля 2019

Я построил цикл for, который должен хранить имя и фамилию футболиста (взятые с веб-сайта) в отдельных столбцах, но цикл for продолжает перезаписывать все сохраненные результаты самым последним выводом.

noplayers <- 3 # the amount of players I want to run the loop for while testing my code
playeridtest <- playerid[1:noplayers] # assign the three IDs to a vector
playernames <- rep(NA, noplayers) 
playernames <- as.data.frame(playernames) # Create an empty data frame to store results in
playernames$id <- playeridtest # Add the three player IDs to the ID column

for(i in playeridtest){
  scoresway <- paste("http://www.scoresway.com?sport=soccer&page=person&id=",i, sep="")
  scoresway <- read_html(scoresway)
  urlnodescorefirst <- html_node(scoresway, "dd:nth-child(2)")
  urltextscorefirst <- html_text(urlnodescorefirst)
  playernames$first <- urltextscorefirst
  urlnodescoresur <- html_node(scoresway, "dd:nth-child(4)")
  urltextscoresur <- html_text(urlnodescoresur)
  playernames$sur <- urltextscoresur
}

Используя тестовый вектор из 3 идентификаторов игроков, чтобы найти имя и фамилию, он сохраняет имя третьего игрока три раза. (ID Лама = 14)

id first    sur
4  Philipp Lahm
11 Philipp Lahm
14 Philipp Lahm

1 Ответ

1 голос
/ 12 апреля 2019
for(i in seq_along(playeridtest)) { # Note change here
  scoresway <- paste("http://www.scoresway.com?sport=soccer&page=person&id=",playeridtest[i], sep="")
  scoresway <- read_html(scoresway)
  urlnodescorefirst <- html_node(scoresway, "dd:nth-child(2)")
  urltextscorefirst <- html_text(urlnodescorefirst)
  playernames$first[i] <- urltextscorefirst
  urlnodescoresur <- html_node(scoresway, "dd:nth-child(4)")
  urltextscoresur <- html_text(urlnodescoresur)
  playernames$sur[i] <- urltextscoresur
}

Результат:

playernames
  playernames id   first          sur
1          NA  4 Maarten Stekelenburg
2          NA 11  Robert         Huth
3          NA 14 Philipp         Lahm

Столбец имен игроков $ имена игроков является результатом кода, который вы указали вверху.Просто пропустите эти две строки и замените на третью:

# playernames <- rep(NA, noplayers) 
# playernames <- as.data.frame(playernames)
playernames<-NULL
...