Почему мой цикл R возвращает ошибку «за пределами»? - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь написать зацикленную функцию, которая извлекает данные из API Discogs. Я начал с написания функции «а», и она работает:

releases <- list()
artists <- list()
artistURL <- "https://api.discogs.com/artists/"

a <- function(artistcode){
  for(i in 0:3){

  artistset <- fromJSON(paste0(artistURL, artistcode, "/releases?page=", i))
  message("Retrieving page ", i)

  releases[[i+1]] <- (as.data.frame(artistset$releases.main_release))
  artists[[i+1]] <- (as.data.frame(artistset$releases.artist ))
}
  return(artistset)
  message("Total rows=", dim(artistset[[2]])[1] )
}
x <- a(135872)

Далее, я бы хотел добавить эту функцию в цикл сбора данных для набора исполнителей, включенных в информационный фрейм, например:

artistdf <- structure(list(
    name = c("Hank Mobley", "Benny Green", "Oscar Peterson", "Art Tatum"), 
    artistcode = c(135872,96442, 254394, 265634)
), .Names = c("name", "artistcode"), row.names = c(NA,-5L), class = c("tbl_df", "tbl", "data.frame"))

for (j in 0:nrow(artistdf)){
    a(artistdf[[j+1, 2]])
}

Здесь я получаю сообщение об ошибке. Я использовал некоторые советы по отладке, но безрезультатно. Кто-нибудь может предложить решение?

1 Ответ

1 голос
/ 06 июля 2019

Кажется, есть две проблемы.

Во-первых, когда вы создаете таблицу ArtistF, вы передаете «row.names = c (NA, -5L)», который создает объект с 5 строками, хотя у вас есть только 4 ряда данных. Измените это на c (NA, -4L).

Во-вторых, начало финального цикла for с 0 создает проблему. Я не знаю, почему это так, но измените его следующим образом:

jazzdata <- list()
for (j in 1:nrow(artistdf)){
    jazzdata[[j]] <- a(artistdf[[j, 2]])
}
jazzdata[2] # data are here

С этими двумя изменениями я смог заставить ваш код работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...