1

RMySql パッケージを使用して MySQL データベースからツイートを取得するために、doParallel バックエンドで実行される foreach each ループを使用したいと考えています。

クエリを実行するすべてのユーザー ID に対してデータベースへの接続を作成し、そのユーザーからのすべてのツイートを 200 バッチで取得します。バッチ サイズが 0 の場合 (それ以上のツイートがない場合)、次のユーザー ID をクエリします。

ツイート内のハッシュタグ数の列と日付の列を持つ、つぶやきと呼ばれるデータフレームに情報を保存したいと考えています。すべてのツイートについて、ハッシュタグの数と、作成された月を調べたいと考えています。次に、データフレームの数値を 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) 
}
4

1 に答える 1

0

コメントのおかげで問題を解決できました: リストに「TRUE」のみが含まれている理由は、foreach ループの最後のコマンドが

dbDisconnect(con) 

データベース接続が正常に閉じられると、「TRUE」が返されます。

だから私はちょうど最後の2行を交換して作る必要がありました

data.frame(date=date,number=number)

そしてすべてがうまくいきました。

よろしく

于 2014-07-23T09:24:10.543 に答える