Проблемы с использованием цикла » для » с rtweet::get_followers в R

#r #twitter

Вопрос:

Я хотел бы очистить несколько подписчиков пользователей Twitter, используя get_followers функцию из rtweet пакета, и я думаю for , что цикл может помочь в этом процессе.

Для этого я сначала создал фрейм данных некоторых пользователей Twitter (выберите «имя экрана»). Фрейм данных, который я создал, имеет форму, как показано ниже.

        > screen_name
1           xxxx
2          xxxxx
....
 

А затем я попробовал for выполнить цикл с этими данными, но это не сработало. (Я использовал rtweet пакеты и devtools пакеты.)

 flw <- vector("list", length(dataframe))
n <- 14872

for(i in seq_along(flw)){
  flw[[i]] <- get_followers(user = dataframe[i], n = n)
  Sys.sleep(60*15)
}
 

Постоянно возвращается следующая ошибка:

Ошибка в get_followers_(пользователь = список(имя экрана = c(«xxxx», «xxxxx», : is.atomic(пользователь) не соответствует ДЕЙСТВИТЕЛЬНОСТИ.

Как я могу решить эту проблему?

Я был бы искренне признателен за любые советы, отзывы и разъяснения. Спасибо

Комментарии:

1. Что, если ты это сделаешь user = dataframe[i, "screen_name"] ?

2. @slamballais Большое спасибо за ваше предложение. В результате появляется новая ошибка, в которой говорится, что Ошибка в get_followers_(пользователь = NULL, n = 14872, страница = «-1», retryonratelimit = FALSE,: значение isTrue(длина(пользователь) == 1) неверно ..

3. Эта ошибка предполагает , что с вами что-то не так dataframe , так как в ней говорится, что вы вводите NULL в user . Проверяй str(dataframe) и проверяй table(is.null(dataframe$screen_name)) . Перед использованием обязательно удалите NULL значения (и любые NA значения ->> is.na() ) get_followers .

4. @slamballais я полностью понял. Большое вам спасибо!

Ответ №1:

  • flw <- vector("list", length(dataframe)) создал бы список длины, такой же, как количество столбцов, но я думаю, что вам нужен список длины, такой же, как количество строк.
  • dataframe[i] это выбор столбца из фрейма данных, который вам может понадобиться dataframe$screen_name[i]
  • Вы можете использовать lapply map функции или, чтобы избежать for цикла и инициализации списка.
 do.call(rbind, lapply(dataframe$screen_name, function(x) {
  Sys.sleep(60*15)
  get_followers(x, n = n)
})) -> flw
 

С map :

 map_df(dataframe$screen_name, function(x) {
  Sys.sleep(60*15)
  get_followers(x, n = n)
}) -> flw
 

Комментарии:

1. Большое спасибо за ваши подробные объяснения. Они будут так полезны. 🙂 Кстати, что означает знак» ->»?

2. @ClaireJoe Это эквивалентно <- , но все, что слева, присваивается переменной справа.