遍历列表以创建不同对象的函数

时间:2020-11-11 15:32:25

标签: 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。我想知道我将如何去做。本质上,我希望做的是通过get_timeline()函数迭代地处理twitter句柄,并根据用户的姓氏来命名每次迭代中的对象。

我对使用循环有些陌生,所以我不知道这是语法问题还是什么问题,但是我希望大家都可以提出建议。我应该怎么做才能得到这个结果?

1 个答案:

答案 0 :(得分: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!