使用for循环利用R中的spotifyr get_artist_audio_features函数,跳过循环中的错误
using a for loop to utilize spotifyr get_artist_audio_features function in R, skip errors in the loop
我从 Spotify 网站下载了我的个人 Spotify 数据。
我将这些数据从 JSON 转换为常规 R 数据帧以供进一步分析。此个人数据框有 4 列:
Endtime artistName trackName Msplayed
但是,Spotify 有许多与艺术家歌曲相关的变量,您只能使用 spotifyr
包中的函数 get_artist_audio_features
检索这些变量。我想将这些变量加入我的个人数据框。该软件包一次只允许检索一位艺术家的数据,为我的数据框中的所有 3000 多位艺术家编写一行代码将非常耗时。
我使用 for loop
尝试收集艺术家的元数据:
empty_list <- vector(mode = "list")
for(i in df$artistName){
empty_list[[i]] <- get_artist_audio_features(i)
}
我的数据框也有播客,但没有可用的元数据。当我尝试在播客上使用该功能时,我收到错误消息:
Error in get_artist_audio_features(i) :
No artist found with artist_id=''.
In addition: Warning messages:
1: Unknown or uninitialised column: `id`.
2: Unknown or uninitialised column: `name`.
当我使用 for 循环时,它会在数据帧中出现第一个错误(播客)时立即停止。当我给它提供一个只有艺术家而不是播客的向量时,它工作得很好。
我检查了堆栈以寻找可能的答案(最值得注意的是:Skipping error in for-loop)但我无法使循环工作。
我的问题:如何在 for loop
中使用函数 spotifyr::get_artist_audio_features
并跳过错误,将结果存储在列表中。不幸的是,很难 post 一个可重现的例子,因为你需要在 spotify 上激活一个开发者帐户才能使用 spotifyr
包。
看来您的问题出在 artist_id = ''
,因此请尝试以下代码,看看它是否有助于您入门(因为我没有可重现的数据,不确定是否有帮助)。在这种情况下,它应该只是跳过播客,但我相信更多的代码设计将允许您将相关数据放在给定的列表位置。
for(i in df$artistName){
if(artist_id = ''){
empty_list[[i]] <- NA
} else {
empty_list[[i]] <- get_artist_audio_features(i)
}
}
您也可以在增量 i
上使用 while
循环条件来重新启动循环,但没有数据我无法这样做。
我从 Spotify 网站下载了我的个人 Spotify 数据。 我将这些数据从 JSON 转换为常规 R 数据帧以供进一步分析。此个人数据框有 4 列:
Endtime artistName trackName Msplayed
但是,Spotify 有许多与艺术家歌曲相关的变量,您只能使用 spotifyr
包中的函数 get_artist_audio_features
检索这些变量。我想将这些变量加入我的个人数据框。该软件包一次只允许检索一位艺术家的数据,为我的数据框中的所有 3000 多位艺术家编写一行代码将非常耗时。
我使用 for loop
尝试收集艺术家的元数据:
empty_list <- vector(mode = "list")
for(i in df$artistName){
empty_list[[i]] <- get_artist_audio_features(i)
}
我的数据框也有播客,但没有可用的元数据。当我尝试在播客上使用该功能时,我收到错误消息:
Error in get_artist_audio_features(i) :
No artist found with artist_id=''.
In addition: Warning messages:
1: Unknown or uninitialised column: `id`.
2: Unknown or uninitialised column: `name`.
当我使用 for 循环时,它会在数据帧中出现第一个错误(播客)时立即停止。当我给它提供一个只有艺术家而不是播客的向量时,它工作得很好。
我检查了堆栈以寻找可能的答案(最值得注意的是:Skipping error in for-loop)但我无法使循环工作。
我的问题:如何在 for loop
中使用函数 spotifyr::get_artist_audio_features
并跳过错误,将结果存储在列表中。不幸的是,很难 post 一个可重现的例子,因为你需要在 spotify 上激活一个开发者帐户才能使用 spotifyr
包。
看来您的问题出在 artist_id = ''
,因此请尝试以下代码,看看它是否有助于您入门(因为我没有可重现的数据,不确定是否有帮助)。在这种情况下,它应该只是跳过播客,但我相信更多的代码设计将允许您将相关数据放在给定的列表位置。
for(i in df$artistName){
if(artist_id = ''){
empty_list[[i]] <- NA
} else {
empty_list[[i]] <- get_artist_audio_features(i)
}
}
您也可以在增量 i
上使用 while
循环条件来重新启动循环,但没有数据我无法这样做。