我有一个简单的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
我哪里出错了?
答案 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