Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中争论复杂列表_R_List_Discogs Api - Fatal编程技术网

在R中争论复杂列表

在R中争论复杂列表,r,list,discogs-api,R,List,Discogs Api,我在R中有一个复杂的列表结构,我想把它放在数据帧格式中。数据如下。该列表包含五张不同音乐专辑的八列数据。每个列表元素中的行数等于为相册做出贡献的人员数,这是我的主要兴趣所在 将列表转换为12行8列的数据帧的有效方法是什么?理想情况下,我希望创建一个函数,该函数接受一个参数(一个具有相同8列的任意数量的音乐专辑的列表),并返回一个数据帧 我试过以各种方式使用flant、unnest和map,但无法破解这个 df2<-list(NULL, structure(list(join = c(\"/

我在R中有一个复杂的列表结构,我想把它放在数据帧格式中。数据如下。该列表包含五张不同音乐专辑的八列数据。每个列表元素中的行数等于为相册做出贡献的人员数,这是我的主要兴趣所在

将列表转换为12行8列的数据帧的有效方法是什么?理想情况下,我希望创建一个函数,该函数接受一个参数(一个具有相同8列的任意数量的音乐专辑的列表),并返回一个数据帧

我试过以各种方式使用
flant
unnest
map
,但无法破解这个

df2<-list(NULL, structure(list(join = c(\"/\", \"/\", \"/\", \"/\", \"/\", \"\"\r\n), name = c(\"Art Tatum\", \"Lionel Hampton\", \"Harry Edison\", \"Buddy Rich\", \r\n\"Red Callender\", \"Barney Kessel\"), anv = c(\"\", \"\", \"\", \"\", \"\", \r\n\"\"), tracks = c(\"\", \"\", \"\", \"\", \"\", \"\"), role = c(\"\", \"\", \"\", \r\n\"\", \"\", \"\"), resource_url = c(\"https://api.discogs.com/artists/265634\", \r\n\"https://api.discogs.com/artists/136133\", \"https://api.discogs.com/artists/258469\", \r\n\"https://api.discogs.com/artists/57620\", \"https://api.discogs.com/artists/272014\", \r\n\"https://api.discogs.com/artists/253476\"), id = c(265634L, 136133L, \r\n258469L, 57620L, 272014L, 253476L), `frset$title` = c(\"The Tatum Group Masterpieces, Vol. 5\", \r\n\"The Tatum Group Masterpieces, Vol. 5\", \"The Tatum Group Masterpieces, Vol. 5\", \r\n\"The Tatum Group Masterpieces, Vol. 5\", \"The Tatum Group Masterpieces, Vol. 5\", \r\n\"The Tatum Group Masterpieces, Vol. 5\")), class = \"data.frame\", row.names = c(NA, \r\n6L)), structure(list(join = \"\", name = \"Art Tatum\", anv = \"\", \r\n    tracks = \"\", role = \"\", resource_url = \"https://api.discogs.com/artists/265634\", \r\n    id = 265634L, `frset$title` = \"This Is...Art Tatum  - Vol 1\"), class = \"data.frame\", row.names = 1L), \r\n    structure(list(join = c(\"/\", \"/\", \"\"), name = c(\"Oscar Peterson\", \r\n    \"Erroll Garner\", \"Art Tatum\"), anv = c(\"\", \"\", \"\"), tracks = c(\"\", \r\n    \"\", \"\"), role = c(\"\", \"\", \"\"), resource_url = c(\"https://api.discogs.com/artists/254394\", \r\n    \"https://api.discogs.com/artists/262816\", \"https://api.discogs.com/artists/265634\"\r\n    ), id = c(254394L, 262816L, 265634L), `frset$title` = c(\"Great Jazz Pianists\", \r\n    \"Great Jazz Pianists\", \"Great Jazz Pianists\")), class = \"data.frame\", row.names = c(NA, \r\n    3L)), structure(list(join = \"\", name = \"Art Tatum\", anv = \"\", \r\n        tracks = \"\", role = \"\", resource_url = \"https://api.discogs.com/artists/265634\", \r\n        id = 265634L, `frset$title` = \"Art Tatum\"), class = \"data.frame\", row.names = 1L), \r\n    structure(list(join = \"\", name = \"Art Tatum\", anv = \"\", tracks = \"\", \r\n        role = \"\", resource_url = \"https://api.discogs.com/artists/265634\", \r\n        id = 265634L, `frset$title` = \"Art!\"), class = \"data.frame\", row.names = 1L))
df2<-unlist(lapply(df, function(x) if (length(x)==8) list(x) else x), recursive=FALSE) # remove NULL lists or those with wrong dimensions

albumdata<-list()
personnel<-function(df){
 for(i in 1:length(df))
  albumdata[[i]]<-as.data.frame(unlist(df[i+1],recursive=FALSE))
  return(albumdata)
  message("Album #",dim(albumdata[[2]])[1]) 
      }

df2在清理数据之后,这个方法工作得很好

jsonlite::rbind_pages(df2)

我不明白为什么你认为它会返回列表以外的任何东西。(您知道数据帧是一个列表,对吧?
albumdata
一开始是一个列表,然后您为它分配了一些可能不是列表的内容,但这不会改变
albumdata
的类别。我怀疑您没有收到任何消息,因为
message
调用发生在
return
语句之后。我很惊讶你在尝试
unlist(df[I+1]
谢谢@CarlBoneri时没有出错,我不知道还有其他
jsonlite
函数!