Я пытаюсь подсчитать количество слов в текстах исполнителя, взятых с lyrics.ovg. Я написал цикл для перебора песен. Однако, если песня не найдена, я получаю сообщение об ошибке. Я хотел бы разобраться с ...
1 ответ
Мы можем использовать withTimeout
из пакета R.utils
, который прекращает попытки через несколько секунд и возвращает фрейм данных со значениями NA
.
Я также изменил цикл while
на map_df
, который должен быть эффективным.
library(musicbrainz)
library(R.utils)
library(stringr)
song_title <- c("Not%20A%20Song", "’39", "(You’re%20So%20Square)%20Baby%20I%20Don’t%20Care")
root_url <- "https://api.lyrics.ovh/v1/"
all_urls <- paste0(root_url,"Queen/",song_title)
cbind(song_title, purrr::map_df(all_urls, function(my_url) {
my_content_from_json <- withTimeout(jsonlite::fromJSON(my_url)$lyrics, timeout = 5, onTimeout = "silent")
if(is.null(my_content_from_json)) return(data.frame(lyrics = NA, word_count = NA))
lyrics <- gsub("[\r\n]", " ", my_content_from_json)
lyrics <- str_squish(lyrics)
word_count <- str_count(lyrics, '\\s+') + 1
data.frame(lyrics, word_count)
})) -> result
result
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.