2012-11-27 47 views
11

我正在构建一个网络应用程序,它使用'twitteR'R软件包下载推文,将这些推文进行整理并通过'闪亮'R Web应用程序进行显示。我有执行该下载和处理的tweet成数据帧的代码没有问题:'闪亮'R包如何处理数据帧?

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

...你可以在你的终端(与加载Twitter的库)运行这个自己,看看它下载鸣叫数据并将结果数据帧打印到屏幕上。

但是,当我使用这种call的 '闪亮' 的应用程序(服务器端)...例如...


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()。我不知道为什么这不起作用。

任何帮助将是伟大的!

+1

看起来像一个错误。无论出于何种原因,在调用库(twitteR)时,as.data.frame的方法都不会被复制,因此您应该在http://groups.google.com/group/shiny-discuss报告。甚至可能是一个命名空间问题。当我调整你的代码来使用'twitteR :: as.data.frame'时,它会产生新的错误。 –

+1

这不是一个闪亮的bug。 'as.data.frame(userTimeline(“nutwition_log”))' – GSee

+1

同样的错误虽然奇怪,因为那不是他正在运行的代码。但它就像他一样对待它。他正在运行'lapply(userTimeline(“nutwition_log”),as.data.frame)' –

回答

6

我不确定这是否是一个错误,但肯定会有一些奇怪的事情发生在这里,Joe Cheng和co。想知道。它的工作原理,是这样的:

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 /参考类神秘”。

10

我想我知道了:https://github.com/rstudio/shiny/commit/0b469f09df7e2ca3bbdb2ddadc8473a8126a9431

直到这是很好的测试,并卷成新的闪亮的版本,您可以通过使用devtools以从GitHub直安装测试:

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

谢谢,很高兴有一个固定!

+0

我确信这只是我刚刚编写错误代码的一个例子。我觉得有点激动,我可以帮忙。看到新的“下载数据”部分。感谢一堆为了解决这个问题! – user1854990