R For循环逐渐变慢

R For loop slows down gradually

我有一个推文数据集,我从中提取了提到的人的列表,然后对于每次提到我在不同的数据框中创建一个单独的行。如果原始数据如下所示:

用户 |鸣叫
一个 | @B @C @D 大家好

我让它看起来像:

用户 |提及
一个 | B
一个 | C
一个 | D

问题是,我为此使用 for 循环,随着时间的推移会变慢。前 10000 个实例发生得非常快,然后它每秒经过 1000 个实例,当它达到 200K 时,它每秒执行 25 个实例。这是我的代码。我可以做些什么来提高性能?有超过 500 万条推文,这太慢了。

#create edge df
networks <- data.frame(user = character(), 
                   mentions=character(), 
                   stringsAsFactors=FALSE) 

#get all mentioned
mentionlist <- str_extract_all(tweets$tweet, "(?<=^|\s)@[^\s]+")


#start collecting edges
a <- 0
b <- 0 

for(i in mentionlist){
  a <- a+1
  for(j in i){
    b <- b+1
    networks[b,1] <- tweets[a,9]
    networks[b,2] <- j
    print(b) #to keep track of it
    #print(paste0(j, "   ", tweets[a,8], "   ",networks[b,1] ))
  }
}

您可以将所有提及项保存在一个列表中,然后使用 unnest 将它们放在不同的行中。尝试:

library(dplyr)

tweets %>%
  mutate(Mentions = stringr::str_extract_all(Tweet, "(?<=^|\s)@[^\s]+")) %>%
  tidyr::unnest(Mentions) -> result

result