У меня возникают проблемы с заполнением указанного вектора значениями поиска из пакета 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" и затем сохраните 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`. 
0
Elias Forsblom 30 Ноя 2020 в 01:39

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.

0
Dylan_Gomes 29 Ноя 2020 в 23:00