开发者

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

I am upgrading a project I had working previously. This code worked a few months ago, in the meantime I have upgraded R and plyr. I think I was on R1.10 and now I am on R1.35, I am not sure what version of plyr I was running before but my current installed version is 1.2.

Here is what I am trying to run:

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

I always get the same error message now.

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

Any advice would be appreciated.

Thanks,

Jason


In amongst your confusion about what versions you are running (there wasn't an R version 1.35!!), there are several issues. (To find out what versions of R and packages you are running, try sessionInfo().)

First, the error you are getting comes from your use of text(). It should be statusText().

Second, it seems like some of the functions/methods are not being exported in the package NAMESPACE. You can make it work by specifying the correct namespace when calling the function, as per the example below, but you should email the package maintainer (Jeff Gentry - contact details on CRAN). You can refer to unexported functions using the ::: operator. ::: takes the package/namespace name on the left-hand side, with the function name on the right hand side, e.g.:

twitteR:::statusSource(x)

Here is a full working version of your example:

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)


This works in the current version of R (2.12.0) and version 0.91 of twitteR:

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

I was getting the same error as you were until I switched over to the "@" operator for accessing the slot values.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜