我正在尝试浏览艺术家和专辑列表,并将每张专辑的每首歌曲的音频功能都放入数据框(使用spotifyr包)。但是,在我的列表中,有一些错误的专辑标题,所以我试图使用agrep或agrepl进行模糊匹配
例如:
library(spotifyr)
library(purrr)
library(dplyr)
library(readr)
Artist <- c("Eminem", "Spiritualized")
Album <- c("Revival", "Pure Phase")
mydata <- data_frame(Artist, Album)
来自spotifyr的get_artist_audio_features()
功能可以为艺术家的每首歌曲提供音频功能,但我只想要来自某个特定专辑的歌曲。
get_album_data <- function(x) {
get_artist_audio_features(mydata$Artist[x]) %>%
filter(agrepl(album_name, mydata$Album[x]) == TRUE)}
try_get_album_data <- function(x) {
tryCatch(get_album_data(x), error = function(e) {data.frame()})}
map_df(seq(1,2), try_get_album_data)
当我运行时,我收到错误:
...argument 'pattern' has length > 1 and only the first element will be used
有什么想法吗?我知道我需要以某种方式遍历agrepl,但我不确定如何在filter()
函数中实现它,或者如果我甚至需要filter()
。
答案 0 :(得分:1)
事实证明,agrepl首先采用模式,然后采用向量,所以在这种情况下,它应该是:
filter(agrepl(mydata$Album[x], album_name) == TRUE)}
而不是
filter(agrepl(album_name, mydata$Album[x]) == TRUE)}