Возникли проблемы с заполнением вектора в цикле for

#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 возвращает ли одно значение или вектор?