#r #for-loop
#r #для цикла
Вопрос:
У меня возникли проблемы с заполнением указанного вектора значениями поиска из пакета spotifyr, и я не могу понять, где что-то идет не так.
top2017id <- numeric(200)
for(i in top2017vec){
search <- search_spotify(i, type = "track", limit = 1)
top2017id[i] <- search$id
}
Error in top2017id[i] <- search$id : replacement has length zero
In addition: Warning message:
Unknown or uninitialised column: `id`.
top2017vec — это вектор, содержащий 200 названий дорожек, например: «Mi Gente», и я хочу, чтобы цикл for выполнял поиск первого названия дорожки в векторе с помощью функции search_spotify, сохраните его в неопределенном «поиске», а затем сохраните search $ id впервое место в уже определенном векторе top2017id, а затем повторите процесс, но вместо этого с именем второго трека.
Функция, которую я использую внутри цикла for, «search_spotify» — это функция из пакета spotifyr, которая возвращает список с 27 переменными. Я тестировал вне цикла for, и индексация с помощью search $id отлично работает, возвращая только строку с идентификатором дорожки.
Помимо ошибки, которую я получаю, она добавляет некоторые значения к вектору top2017id. Первые 200 значений равны 0, но после этого добавляется 27 значений, которые чередуются между именем дорожки из top2017vec и идентификатором конкретной дорожки. Вот так:
> top2017id
"0"
"0"
"0"
"0"
...
Believer
"0pqnGHJpmpxLKifKRmU6WP"
Felices los 4
"1RouRzlg8OKFeqc6LvdxmB"
Что мне удалось испортить?
Редактировать:
Я продолжал пытаться после ответа от @Dylan_Gomes и добился некоторого прогресса, однако сейчас я столкнулся с другой аналогичной ошибкой.
for(i in 1:length(top2017vec)){
search <- search_spotify(top2017vec[i], type = "track", limit = 1)
top2017id[i] <- search$id
}
Теперь он работает для первых 26 идентификаторов, но после первых 26 идентификаторов он выдает мне 0 для остальной части вектора, а затем заканчивается. Сообщение об ошибке, которое я получаю, является:
Error in top2017id[i] <- search$id : replacement has length zero
In addition: Warning message:
Unknown or uninitialised column: `id`.
Ответ №1:
Проблема может быть в том, как у вас есть цикл for. Например:
vect<-numeric(200)
for(i in vect){
search<-rnorm(1,0,1)
vect[i]<-search
}
vect
Не работает, он по-прежнему возвращает вектор из 200 нулей. Тем не менее, если мы изменим структуру цикла for на:
for(i in 1:length(vect)){
search<-rnorm(1,0,1)
vect[i]<-search
}
vect
[1] 0.87096868 0.78146593 0.72339698 0.45954073 1.29507907 0.28822357 -0.97277289 -0.22033080
[9] -0.41323427 -1.79971088 -0.20233652 -1.30564552 0.46676890 -0.64209630 0.95616195 0.67121680
[17] -0.18220987 -0.45524523 -0.91059605 -1.65350181 -0.33524219 2.60902403 0.58630848 -1.22887993
Затем он работает так, как ожидалось. Может возникнуть другая проблема, spotifyr
но я не могу ее проверить, потому что она не работает с текущей версией R.
Комментарии:
1. Спасибо, что нашли время ответить! Вы, вероятно, правы, однако, я полагаю, что столкнулся бы с проблемой, связанной с получением функции поиска для поиска определенного имени дорожки, поскольку в созданном мной for-цикле я указал его для поиска для «i». Однако я могу быть полностью потерян? термин, который я ищу, в этом случае будет просто 1, 2, 3 и т.д. Вместо названия дорожки.
2. например, если я выполняю этот код: « for(i in 1:length(top2017vec)){ search <- search_spotify(i, type = «track», limit = 1) top2017id[i] <- search $id } « выдает ошибку « Ошибка в search_spotify(i, type = «track», limit = 1): «q» должно быть строкой « Но, может быть, есть лучшее решение для автоматического заполнения имени дорожки?
3. в справочных документах q = ключевые слова поискового запроса и необязательные фильтры полей и операторы. То есть это то, что вы ищете в spotify.
numeric(200)
это набор нулей, а не символьная строка, которую можно искать в Spotify. Имеет ли это смысл? Где ваши названия дорожек?4. Да, это имеет смысл! Мои имена дорожек находятся в «top2017vec», векторе с 200 различными строками с названиями дорожек. Я отредактировал свой оригинальный пост и немного доработал его после тестирования вашего решения. Это был абсолютный некоторый прогресс, однако теперь он останавливается после предоставления мне 26 первых идентификаторов.
5.
search$id
возвращает ли одно значение или вектор?