Функция, которая перебирает список для создания разных объектов

#r

#r

Вопрос:

В настоящее время я написал функцию, в которой я индивидуально просматриваю несколько дескрипторов Twitter и присваиваю объекту имена в зависимости от фамилии этого пользователя Twitter. Например:

 f <- function() {
  dougjones <- rtweet::get_timeline('@SenDougJones', n = 50, max_id = NULL, home = FALSE, parse = TRUE, check = FALSE, token = token, include_rts = FALSE)
  bennet <- rtweet::get_timeline('@SenatorBennet', n = 50, max_id = NULL, home = FALSE, parse = TRUE, check = FALSE, token = token, include_rts = FALSE)
  blumenthal <- rtweet::get_timeline('@SenBlumenthal', n = 50, max_id = NULL, home = FALSE, parse = TRUE, check = FALSE, token = token, include_rts = FALSE)
}
  

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

 list <- list(
  handles(handle = 
  tibble(c('@SenDougJones','@SenatorBennet','@SenBlumenthal')),
  names(name = tibble(c('Jones','Bennet','Blumenthal')))

f <- function(list){
  for(i in seq_along(list$handles)){
  for(j in seq_along(list$names)){
   names[[j]] <- rtweet::get_timelines(list$handles[[i]],n=50,max_id=NULL,home=FALSE,parse=TRUE, check = FALSE, token = token,include_rts=FALSE) }}}

  

Я знаю, что этот код неверен, потому что при его запуске я получаю NULL. Мне было интересно, как бы я это сделал. По сути, то, что я надеюсь сделать, это итеративно передавать дескрипторы Twitter через функцию get_timeline(), а также называть объекты из каждой итерации на основе фамилии пользователя. Имя пользователя.

Я несколько новичок в использовании циклов, поэтому понятия не имею, является ли это проблемой синтаксиса или чем-то еще, но я надеялся, что у всех вас могут быть предложения. Что я должен сделать, чтобы получить этот результат?

Ответ №1:

Я не знаю, что именно вы ищете, но следующее должно сработать.

 last.names <- c('Jones','Bennet','Blumenthal')
twitter.handles <- c('@SenDougJones','@SenatorBennet','@SenBlumenthal')

my.list <- list(last.names = last.names,
                twitter.handles = twitter.handles,
                indexes = seq_along(last.names))

my.list$twitter.timeline <- lapply(my.list$indexes,
       FUN = function(index) {
         print(paste(my.list$last.names[[index]], my.list$twitter.handles[[index]], sep = ";"))
         
         twitter.timeline <- rtweet::get_timelines(my.list$twitter.handles[[index]],
                                                                   n=50,
                                                                    max_id=NULL,
                                                                    home=FALSE,
                                                                    parse=TRUE,
                                                                    check = FALSE,
                                                                    token = token,
                                                                    include_rts=FALSE)

           return(twitter.timeline)
       })


  

HTH!

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

1. Похоже, что это делает то, что я бы хотел: я получаю следующую ошибку, выполняя этот код: Ошибка во время обертывания: предоставлено больше элементов, чем нужно для замены Ошибка: больше не доступны обработчики ошибок (рекурсивные ошибки?); вызов ‘прервать’ перезапуск

2. Я обновил код в своем ответе. Пожалуйста, посмотрите. Ошибка была вызвана тем, что я попытался заменить один элемент (целое число, последовательность) несколькими элементами (что и возвращает get_timelines).