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
我有一个推文数据集,我从中提取了提到的人的列表,然后对于每次提到我在不同的数据框中创建一个单独的行。如果原始数据如下所示:
用户 |鸣叫
一个 | @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