1

我正在尝试浏览艺术家和专辑列表,并将每张专辑的每首歌曲的音频特征放入数据框(使用 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)

get_artist_audio_features()来自 spotifyr的功能会返回艺术家每首歌曲的音频功能,但我只想要某些特定专辑中的歌曲。

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().

4

1 回答 1

1

事实证明 agrepl 先取模式,再取向量,所以在这种情况下,它应该是:

filter(agrepl(mydata$Album[x], album_name) == TRUE)}

而不是

filter(agrepl(album_name, mydata$Album[x]) == TRUE)}

于 2018-02-02T16:18:33.917 回答