[英]Why does my R loop return an out of bounds error?
我正在嘗試編寫一個從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]])
}
這是我遇到“越界”錯誤的地方。 我使用了一些調試建議,但無濟於事。 誰能提供解決方案?
似乎有兩個問題。
首先,在創建artistdf標記的地方,傳遞“ row.names = c(NA,-5L)”,盡管只有4行數據,該行創建的對象只有5行。 將其更改為c(NA,-4L)。
其次,將您的final for循環從0開始會造成問題。 我不知道為什么,但是將其更改為:
jazzdata <- list()
for (j in 1:nrow(artistdf)){
jazzdata[[j]] <- a(artistdf[[j, 2]])
}
jazzdata[2] # data are here
通過這兩個更改,我可以使您的代碼正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.