在 R 中展平响应文件

Flattening out Response File in R

我是 R 的新手,虽然我已经阅读了 r 文档和其他问题,但我仍然对这些概念有疑问。 Spotify 的 Track 对象是一个列表,其中包含曲目的艺术家的内部列表。我试图将列表扁平化为列表中的第一位艺术家,但我什至不知道要使用的正确功能。

基本上,我想从下面的 Songs 对象中提取名称、ID 和第一位艺术家。我使用 for 循环并遍历每条记录来完成它,但我想知道是否有更优雅的方法来做到这一点。

    Songs[[407]][c("name","id","artists")]
    $name
    [1] "Down Like This (feat. Tkay Maidza)"

    $id
    [1] "0DEbrObho3rzUFkaKLrpQA"

    $artists
    $artists[[1]]
    $artists[[1]]$external_urls
    $artists[[1]]$external_urls$spotify
    [1] "https://open.spotify.com/artist/3SwgftmsT5rVepCSSco3ZR"


    $artists[[1]]$href
    [1] "https://api.spotify.com/v1/artists/3SwgftmsT5rVepCSSco3ZR"

    $artists[[1]]$id
    [1] "3SwgftmsT5rVepCSSco3ZR"

    $artists[[1]]$name
    [1] "Motez"

    $artists[[1]]$type
    [1] "artist"

    $artists[[1]]$uri
    [1] "spotify:artist:3SwgftmsT5rVepCSSco3ZR"


    $artists[[2]]
    $artists[[2]]$external_urls
    $artists[[2]]$external_urls$spotify
    [1] "https://open.spotify.com/artist/1kMPdZQVdUhMDKDWOJM5iK"


    $artists[[2]]$href
    [1] "https://api.spotify.com/v1/artists/1kMPdZQVdUhMDKDWOJM5iK"

    $artists[[2]]$id
    [1] "1kMPdZQVdUhMDKDWOJM5iK"

    $artists[[2]]$name
    [1] "Tkay Maidza"

    $artists[[2]]$type
    [1] "artist"

    $artists[[2]]$uri
    [1] "spotify:artist:1kMPdZQVdUhMDKDWOJM5iK"

您或许可以编写一个简单的函数,然后使用 lapply。沿着:

songProcess <- function(song){
  name <- song$name
  id <- song$id
  fistArtist <- song$artists[[1]]$name
  return(c(name,id,firstArtist))
}
parsed <- lapply(Songs,songProcess)

parsed 将是歌曲名称、ID 和第一位艺术家的三元素向量列表。