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

StackOverflow https://stackoverflow.com/questions/4288926

  •  28-09-2019
  •  | 
  •  

Question

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

Was it helpful?

Solution

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)

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top