为什么我的R循环返回超出范围的错误?

时间:2019-07-05 23:16:11

标签: r loops discogs-api

我正在尝试编写一个从discogs api提取数据的循环函数。 我从编写函数“ a”开始,并且有效:

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 个答案:

答案 0 :(得分:1)

似乎有两个问题。

首先,在创建artistdf标记的地方,传递的是“ row.names = c(NA,-5L)”,尽管只有4行数据,该行创建的对象只有5行。将其更改为c(NA,-4L)。

第二,将您的最终for循环从0开始会造成问题。我不知道为什么,但是按如下所示更改它:

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

通过这两个更改,我得以使您的代码正常工作。