0

いくつかのユーザー名の過去100件のツイートを.csvファイルに書き込むための単純なforループがあります。

library(twitteR)
mclist <- read.table('usernames.txt')

for (mc in mclist) 
{
    tweets <- userTimeline(mc, n = 100)

    df <- do.call("rbind", lapply(tweets, as.data.frame))

    write.csv(df, file=paste("Desktop/", mc, ".csv", sep = ""), row.names = F)
}

StackOverflowで読んだ内容をほぼフォローしましたが、引き続き次のエラーメッセージが表示されます。

Error in file(file, ifelse(append, "a", "w")) : 
  invalid 'description' argument
In addition: Warning message:
In if (file == "") file <- stdout() else if (is.character(file)) { :
  the condition has length > 1 and only the first element will be used

どこで私は間違えましたか?

4

3 に答える 3

4

コードを少しクリーンアップしたところ、すべてが機能し始めました。

ステップ1:作業ディレクトリを設定し、「twitteR」パッケージをロードしましょう。

library(twitteR)
setwd("C:/Users/Dinre/Desktop") # Replace with your desired directory

ステップ2:最初に、フラットテキストファイルからユーザー名のリストをロードする必要があります。テキストファイルの各行には、次のように1つのユーザー名があると想定しています。

[contents of usernames.txt]
edclef
notch
dkanaga

'scan'関数を使用してロードし、各行を配列に読み込みます。

mclist <- scan("usernames.txt", what="", sep="\n")

ステップ3:以前と同じようにユーザー名をループしますが、入力として出力に同じディレクトリを使用するため、ディレクトリを参照しません。元のコードでは、デスクトップディレクトリを参照しようとしたときに構文エラーが発生したため、これを回避します。

for (mc in mclist){
    tweets <- userTimeline(mc, n = 100)
    df <- do.call("rbind", lapply(tweets, as.data.frame))
    write.csv(df, file=paste(mc, ".csv", sep = ""), row.names = F)
}

デスクトップに3つのファイルが表示され、すべてのデータが正しいようです。

edclef.csv
notch.csv
dkanaga.csv

更新:コード内の別のディレクトリを本当に参照したい場合は、「。」を使用してください。親ディレクトリを参照する文字。たとえば、作業ディレクトリがWindowsユーザープロファイルの場合、次のように「デスクトップ」フォルダを参照します。

setwd("C:/Users/Dinre")
...
write.csv(df, file=paste("./Desktop/". mc, ".csv", sep = ""), row.names = F)
于 2013-02-04T01:41:54.617 に答える
2

パッケージtwListToDFには、ツイートのリストからdata.frameへの変換を処理する便利な関数があります。

于 2013-02-09T20:22:48.053 に答える
0

あなたのmclistはですので、あなたはあなたをdata.frame置き換えることができますforapply

apply( mclist, 1,function(mc){
  tweets <- userTimeline(mc, n = 100)
  df <- do.call("rbind", lapply(tweets, as.data.frame))
  write.csv(df, file=paste("Desktop/", mc, ".csv", sep = ""), ##!! Change Desktop to  
                                                              ## something like Desktop/tweets/
            row.names = F)
})

PS:

userTimeline関数は、要求されたユーザーがパブリックタイムラインを持っている場合、または以前にregisterTwitterOAuthを使用してOAuthオブジェクトを登録した場合にのみ機能します。

于 2013-02-04T01:05:45.510 に答える