为什么我的 R 循环 return 出现越界错误?
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]])
}
这是我收到 'out of bounds' 错误的地方。我使用了一些调试建议,但无济于事。谁能提供解决方案?
似乎有两个问题。
首先,在创建 artistdf tibble 的地方,您传递了 "row.names = c(NA,-5L),",它创建了一个包含 5 行的对象,尽管您只有 4 行数据。将其更改为 c(NA, -4L).
其次,从 0 开始你的最终 for 循环会产生一个问题。我不知道为什么会这样,但按如下方式更改它:
jazzdata <- list()
for (j in 1:nrow(artistdf)){
jazzdata[[j]] <- a(artistdf[[j, 2]])
}
jazzdata[2] # data are here
通过这两项更改,我能够让您的代码正常工作。
我正在尝试编写一个从 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]])
}
这是我收到 'out of bounds' 错误的地方。我使用了一些调试建议,但无济于事。谁能提供解决方案?
似乎有两个问题。
首先,在创建 artistdf tibble 的地方,您传递了 "row.names = c(NA,-5L),",它创建了一个包含 5 行的对象,尽管您只有 4 行数据。将其更改为 c(NA, -4L).
其次,从 0 开始你的最终 for 循环会产生一个问题。我不知道为什么会这样,但按如下方式更改它:
jazzdata <- list()
for (j in 1:nrow(artistdf)){
jazzdata[[j]] <- a(artistdf[[j, 2]])
}
jazzdata[2] # data are here
通过这两项更改,我能够让您的代码正常工作。