0

我有一个简单的 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

我哪里做错了?

4

3 回答 3

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)
于 2013-02-04T01:41:54.617 回答
2

twListToDF包中有一个便利函数,它将处理推文列表到 data.frame 的转换。

于 2013-02-09T20:22:48.053 回答
0

由于您的 mclist 是 a 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 对象时才有效

于 2013-02-04T01:05:45.510 回答