簡體   English   中英

為什么我的R循環返回超出范圍的錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM