1

我正在升级我以前工作过的项目。这段代码几个月前有效,同时我升级了 R 和 plyr。我想我在 R1.10 上,现在我在 R1.35 上,我不确定我之前运行的是什么版本的 plyr,但我当前安装的版本是 1.2。

这是我要运行的内容:

library(plyr)
library(twitteR)

tw <- head(ldply(searchTwitter("rstats", session=getCurlHandle(), n=10), function(x) data.frame(text=text(x), favorited=favorited(x), created=created(x), truncated=truncated(x), id=id(x), statusSource=statusSource(x), screenName=screenName(x))))

我现在总是收到相同的错误消息。

Error in as.double(y) : 
  cannot coerce type 'S4' to vector of type 'double'

任何意见,将不胜感激。

谢谢,

杰森

4

2 回答 2

4

在您对正在运行的版本感到困惑(没有 R 版本 1.35 !!)中,有几个问题。(要了解您正在运行的 R 和软件包版本,请尝试sessionInfo().)

首先,您得到的错误来自您对text(). 应该是statusText()

其次,似乎某些函数/方法没有在包 NAMESPACE 中导出。您可以通过在调用函数时指定正确的命名空间来使其工作,如下例所示,但您应该向包维护者发送电子邮件(Jeff Gentry - CRAN上的联系方式)。您可以使用运算符引用未导出的函数::::::左侧是包/命名空间名称,右侧是函数名称,例如:

twitteR:::statusSource(x)

这是您的示例的完整工作版本:

library(plyr)
library(twitteR)
## simplify the call to see what is going on - function first
fooFun <- function(x) {
    data.frame(text = statusText(x), favorited=favorited(x),
               created=created(x), truncated=twitteR:::truncated(x),
               id=id(x), statusSource=twitteR:::statusSource(x),
               screenName=screenName(x))
}
## now ldply it
out <- ldply(searchTwitter("rstats", session = getCurlHandle(), n = 10), fooFun)
## show some of it:
head(out)
于 2010-11-26T23:05:55.220 回答
1

这适用于当前版本的 R (2.12.0) 和 twitteR 的 0.91 版本:

tw <- ldply(searchTwitter("rstats", session=getCurlHandle(), n=10), 
              function(x)  c(text=x@text, favorited=x@favorited, created=x@created, 
                             truncated=x@truncated, id=x@id, statusSource=x@statusSource, 
                             screenName=x@screenName )
                          )

在切换到“@”运算符来访问插槽值之前,我遇到了与您相同的错误。

于 2010-11-26T23:13:14.600 回答