将twitteR结果转换为数据框

时间:2013-02-03 22:36:11

标签: r twitter

我有一个简单的for循环将一些用户名的过去100条推文写入.csv文件:

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

我哪里出错了?

3 个答案:

答案 0 :(得分:4)

我刚刚清理了一下代码,一切都开始了。

第1步:让我们设置工作目录并加载'twitteR'包。

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

第2步:首先,我们需要从平面文本文件中加载用户名列表。我假设文本文件中的每一行都有一个用户名,如下所示:

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

我最终在桌面上有三个文件,所有数据似乎都是正确的。

edclef.csv
notch.csv
dkanaga.csv

更新:如果您确实要在代码中引用不同的目录,请使用“。”用于引用父目录的字符。例如,如果您的工作目录是您的Windows用户配置文件,您将参考“桌面”文件夹,如下所示:

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

答案 1 :(得分:2)

twListToDF 中有一个便利功能,可以处理推文列表到data.frame的转换。

答案 2 :(得分: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功能仅在用户请求的情况下有效   公共时间轴,或者您之前已注册过OAuth对象   使用registerTwitterOAuth