11

「twitteR」Rパッケージを使用してツイートをダウンロードするWebアプリを構築し、それらのツイートを変更して「光沢のある」RWebアプリを介して表示しています。ツイートをダウンロードしてデータフレームに処理するコードを実行しても問題ありません。

do.call('rbind', lapply(userTimeline('nutwition_log'), as.data.frame))

...これをターミナルで(twitteRライブラリをロードして)自分で実行し、ツイートデータをダウンロードして、結果のデータフレームを画面に出力することを確認できます。

しかし、この種の呼び出しを「光沢のある」アプリ(サーバー側)で使用すると...たとえば...


server.R:

library(shiny)
library(twitteR)
shinyServer(function(input, output) {

  datasetInput <- reactive(function() {
    tweets <- userTimeline(input$subscriber)
    do.call('rbind', lapply(tweets, as.data.frame))
  })

  output$view <- reactiveTable(function() {
    head(datasetInput(), n = input$obs)
  })

})

ui.R:

library(shiny)
library(twitteR)

shinyUI(pageWithSidebar(
  headerPanel('FitnessTrack'),
  sidebarPanel(
    selectInput("subscriber", "Select Subscriber:", 
                choices = c("nutwition_log", "anotherAccount")),
    numericInput("obs", "Number of observations to view:", 10)
  ),
  mainPanel(
    tableOutput("view")
  )
))

...次のエラーが発生します:

Error in as.data.frame.default(X[[1L]], ...) : 
  cannot coerce class 'structure("status", package = "twitteR")' into a data.frame
Error in as.data.frame.default(X[[1L]], ...) : 
  cannot coerce class 'structure("status", package = "twitteR")' into a data.frame
Error in as.data.frame.default(X[[1L]], ...) : 
  cannot coerce class 'structure("status", package = "twitteR")' into a data.frame

...私がやりたいのは、ツイートをダウンロードして変更しているユーザーを変更し、結果のデータフレーム(...datasetInput()リターン、ロード先output$view)をに出力できるようにすることだけmainPanel()です。なぜこれが機能しないのかわかりません。

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

10

私はそれを持っていると思います:https://github.com/rstudio/shiny/commit/0b469f09df7e2ca3bbdb2ddadc8473a8126a9431

これが適切にテストされ、新しい Shiny ビルドに組み込まれるまでは、devtools を使用して GitHub から直接インストールすることでテストできます。

library(devtools)
install_github('shiny', 'rstudio')

ありがとう、それが修正されてうれしいです!

于 2012-11-27T05:57:04.637 に答える
6

これがバグかどうかはわかりませんが、JoeChengと共同でここで起こっている奇妙なことが確かにあります。知りたいです。それはこのように動作します:

server.R

library(shiny)
library(twitteR)
shinyServer(function(input, output) {

  datasetInput <- reactive(function() {
    tweets <- userTimeline(input$subscriber)
    tmp <- lapply(1:length(tweets),function(x) data.frame(
      text=tweets[[x]]$text,
      created=tweets[[x]]$created,
      screename=tweets[[x]]$getScreenName()))

    do.call(rbind,tmp)
  })

  output$view <- reactiveTable(function() {
    head(datasetInput(), n = input$obs)
  })

})

したがって、これはdata.framesの問題ではなく、twitteRが参照クラスのオブジェクトのメソッドを設定する方法と関係がありますstatus。アクセサを介してフィールドを参照してまったく同じコードを実行すると、問題なく実行されるようです。

「さらに別のS4/リファレンスクラスの謎」のように感じます。

于 2012-11-27T01:17:09.400 に答える