我正在尝试编写一个从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]])
}
这是我遇到“越界”错误的地方。我使用了一些调试建议,但无济于事。谁能提供解决方案?
答案 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
通过这两个更改,我得以使您的代码正常工作。