Вопрос об ошибке Plyr: Ошибка в as.double (y): невозможно привести тип 'S4' к вектору типа 'double' - PullRequest
1 голос
/ 27 ноября 2010

Я обновляю проект, в котором работал ранее.Этот код работал несколько месяцев назад, тем временем я обновил 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'

Буду признателен за любой совет.

Спасибо,

Джейсон

Ответы [ 2 ]

4 голосов
/ 27 ноября 2010

Среди ваших недоразумений по поводу того, какие версии вы используете (не было версии 1.35 !!), есть несколько проблем. (Чтобы узнать, какие версии R и пакеты вы используете, попробуйте sessionInfo().)

Во-первых, ошибка, которую вы получаете, происходит от использования text(). Это должно быть statusText().

Во-вторых, похоже, что некоторые функции / методы не экспортируются в пакет NAMESPACE. Вы можете заставить его работать, указав правильное пространство имен при вызове функции, как показано в примере ниже, но вы должны отправить письмо сопровождающему пакета (Джефф Джентри - контактные данные по 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)
1 голос
/ 27 ноября 2010

Это работает в текущей версии R (2.12.0) и версии 0.91 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 )
                          )

Я получал ту же ошибку, что и вы, пока не переключился на оператор «@» для доступа к значениям слота.

...