2013-02-03 77 views
0

我有一個簡單的循環來寫過去100個鳴叫幾個用戶名的爲.csv文件:轉換Twitter的結果,以數據幀

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 

我哪裏出錯了?

+2

您正在向您的循環傳遞數據幀。循環遍歷數據幀將遍歷每個元素,即每列。你想傳遞一個向量到循環,即像'mclist [,1]''。 – Andrie

+0

雖然我仍然得到相同的錯誤 - 有關對象userTimeline的問題似乎是問題所在 – Emir

回答

4

我剛剛清理了一下代碼,一切都開始工作。

第1步:讓我們設置工作目錄並加載'twitteR'包。

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

步驟2:首先,我們需要從一個純文本文件中加載用戶名列表。我假設在文本文件中的每一行都有一個用戶名,如下:

[contents of usernames.txt] 
edclef 
notch 
dkanaga 

讓我們使用「掃描」功能來讀取每行到一個數組裝載它:

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) 
} 

我最終在桌面上有三個文件,所有的數據似乎是正確的。

edclef.csv 
notch.csv 
dkanaga.csv 

更新:如果你真的想引用不同的目錄,你的代碼中,使用「」字符來引用父目錄。舉例來說,如果你的工作目錄是Windows用戶的個人資料,你要提到「桌面」文件夾中,像這樣:

setwd("C:/Users/Dinre") 
... 
write.csv(df, file=paste("./Desktop/". mc, ".csv", sep = ""), row.names = F) 
0

由於您的mclist是data.frame,您可以取代你for通過apply

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對象

2

有沒有在包裝twListToDF一個方便的功能,它將處理列表的轉換推送到data.frame。