2012-11-27 16 views
11

Ich baue eine Web-App, die Tweets mit dem "twitteR" -Paket herunterlädt, diese Tweets mischt und sie über eine "glänzende" R-Web-App anzeigt. Ich habe kein Problem, den Code ausführt, die Downloads und die Tweets in einen Datenrahmen verarbeitet:Wie behandelt das "glänzende" R-Paket Datenrahmen?

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

... Sie dies in Ihrem Terminal laufen können (mit der TWITTER Bibliothek geladen) selbst und sehen, dass es die Tweet-Downloads Daten und druckt den resultierenden Datenrahmen auf den Bildschirm.

Aber, wenn ich diese Art von Ruf in einem 'glänzend' app (serverseitig) ... zum Beispiel ...


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

... ich erhalte den folgenden Fehler:

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 

... alles, was ich tun möchte, ist in der Lage sein, den Benutzer, dessen Tweets zu ändern heruntergeladen und munged wird, dann gibt den resultierenden Datenrahmen (... den datasetInput() Gegenzug geladen output$view) auf dem mainPanel(). Ich habe keine Ahnung, warum das nicht funktioniert.

Jede Hilfe wäre großartig!

+1

Sieht aus wie ein Fehler. Sie sollten unter: http://groups.google.com/group/shiny-discuss berichten, aus welchem ​​Grund die Methoden für as.data.frame nicht kopiert werden, wenn Sie die Bibliothek (twitteR) aufrufen. Vielleicht sogar ein Namespace-Problem. Wenn ich den Code für die Verwendung von "twitterR :: as.data.frame" anpasse, pumpt er neue Fehler aus. –

+1

Dies ist kein glänzender Fehler. Sie erhalten den gleichen Fehler mit 'as.data.frame (userTimeline (" nutwition_log "))' – GSee

+1

Seltsam, denn das ist nicht der Code, den er ausführt. Aber es behandelt es so, als wäre er es. Er läuft 'lapply (userTimeline (" nutwition_log "), as.data.frame)' –

Antwort

6

Ich bin mir nicht sicher, ob das ein Fehler ist, aber es ist definitiv etwas seltsam hier los, dass Joe Cheng und Co. würde gerne wissen. Es funktioniert so:

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

}) 

es ist also kein Problem mit data.frames, sondern etwas mit der Art und Weise zu tun, dass TWITTER status Methoden für Objekte der Referenzklasse setzt. Das Ausführen des exakt gleichen Codes durch Referenzieren der Felder über Accessoren scheint problemlos zu funktionieren.

Fühlt sich an wie "noch ein weiteres S4/Referenzklassengeheimnis".

10

Ich glaube, ich habe es: https://github.com/rstudio/shiny/commit/0b469f09df7e2ca3bbdb2ddadc8473a8126a9431

Bis diese ordnungsgemäß geprüft und rollte in eine neue glänzende bauen, können Sie es testen, indem devtools installieren direkt von GitHub mit:

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

Danke, froh, dass es repariert wurde!

+0

Ich war mir sicher, dass es nur ein Fall von mir war, nur etwas falsch zu kodieren. Ich fühle mich irgendwie begeistert, ich könnte helfen. Habe den neuen Bereich "Daten herunterladen" gesehen. Vielen Dank, dass Sie das herausgefunden haben! – user1854990

Verwandte Themen