我想使用带有doParallel后端的foreach每个循环来使用RMySql包从MySQL数据库获取推文。
我为每个要查询的用户ID创建了与数据库的连接,然后我从该用户获得200个批次的每条推文。如果批量大小为0(因此没有其他推文),我会查询下一个用户ID。
我想将信息存储在名为tweets的数据框中,该数据框包含推文中的主题标签数量列和带日期的列。对于每条推文,我想知道它有多少个标签,以及它创建的月份。然后我想将数据框中的数字增加1.
那么如何为数据框中的每条推文写出结果呢?
我的数据框开头:
| dates | zero_ht | one_ht | two_ht | three_ht | four_ht | five_ht |
|----------|---------|--------|--------|----------|---------|---------|
| 01/01/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/02/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/03/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/04/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/05/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/06/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/07/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/08/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/09/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/10/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/11/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/12/13 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/01/14 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/02/14 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/03/14 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/04/14 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/05/14 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/06/14 | 0 | 0 | 0 | 0 | 0 | 0 |
| 01/07/14 | 0 | 0 | 0 | 0 | 0 | 0 |
我的代码:
x<- foreach(i=1:nrow(ids) ,.packages=c("DBI", "RMySQL"),.combine=rbind ) %dopar% {
con <- dbConnect(MySQL(), *CREDENTIALS*)
start <- 0
length <- 1
while(length > 0)
{
query <- *QUERY*
data <- dbGetQuery(con, query)
length <- nrow(data)
#print(paste("Starting at ",start,sep=""))
for(j in 1:length)
{
if(length==0)
{
}
else{
#get the number of hashtags used
number <- nchar((gsub("[^#]","",data$message[j])))
#get the date the tweet was created
date <- paste(format(as.Date(data$created_at[j]), "%Y-%m"),"-01",sep="")
# just use it when there are less than 5 hashtags
if(number < 5)
{
if(number==0)
{
tweets[tweets$dates==date,2] <- tweets[tweets$dates==date,2]+1
}
else{
tweets[tweets$dates==date,number+1] <- tweets[tweets$dates==date,number+1]+1
}
}
}
}
#increase the start by 200; to get the next 200 tweets
start <- start + 200
}
data.frame(date=date,number=number)
dbDisconnect(con)
}
答案 0 :(得分:0)
感谢我的评论,我可以解决问题: 列表中只有&#34; TRUE&#34; s的原因是foreach循环中的最后一个命令是
dbDisconnect(con)
当数据库连接成功关闭时,它返回一个&#34; TRUE&#34;。
所以我只需交换最后两行并制作
data.frame(date=date,number=number)
一切正常。
此致