2012-11-27 25 views
11

Tôi đang xây dựng một ứng dụng web tải xuống các tweet bằng gói 'twitteR' R, nhét những tweet đó và hiển thị chúng thông qua ứng dụng web 'sáng bóng' R. Tôi không có vấn đề thực thi mã mà tải và xử lý các tweet vào một khung dữ liệu:Gói 'sáng bóng' R đối phó với các khung dữ liệu như thế nào?

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

... bạn có thể chạy trong terminal của bạn (với thư viện Twitter nạp) chính mình và thấy rằng nó tải các tweet dữ liệu và in khung dữ liệu kết quả vào màn hình.

Nhưng, khi tôi sử dụng loại này của cuộc gọi trong một ứng dụng 'bóng' (server-side) ... ví dụ ...


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

... tôi nhận được lỗi sau:

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 

... tất cả tôi muốn làm là có thể thay đổi người dùng có tweet đang được tải về và munged, sau đó đầu ra khung kết quả dữ liệu (... các datasetInput() Đổi lại, nạp vào output$view) đến mainPanel(). Tôi không biết tại sao điều này không hiệu quả.

Mọi trợ giúp sẽ tuyệt vời!

+1

Trông giống như một lỗi. Bạn nên báo cáo tại: http://groups.google.com/group/shiny-discuss vì bất kỳ lý do gì khiến các phương thức cho as.data.frame không được sao chép khi bạn gọi thư viện (twitteR). Có lẽ ngay cả một vấn đề không gian tên. Khi tôi điều chỉnh mã của bạn để sử dụng 'twitteR :: as.data.frame' nó sẽ phát ra các lỗi mới. –

+1

Đây không phải là lỗi sáng bóng. Bạn nhận được cùng một lỗi với 'as.data.frame (userTimeline (" nutwition_log "))' – GSee

+1

Lạ thay, bởi vì đó không phải là mã anh ta đang chạy. Nhưng nó đối xử với nó như thể anh ta vậy. Anh ta đang chạy 'lapply (userTimeline (" nutwition_log "), as.data.frame)' –

Trả lời

6

Tôi không chắc đây có phải là lỗi hay không, nhưng chắc chắn có một số điều kỳ lạ xảy ra ở đây là Joe Cheng và đồng nghiệp. muốn biết về. Nó hoạt động như sau:

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

}) 

Vì vậy, nó không phải là một vấn đề với data.frames, mà là một cái gì đó để làm với cách mà Twitter đặt phương pháp cho các đối tượng của lớp tham khảo status. Chạy cùng một mã chính xác của bạn bằng cách tham chiếu các trường thông qua các trình truy cập dường như chỉ chạy tốt.

Cảm thấy như "một bí ẩn lớp học khác/tham chiếu".

10

Tôi nghĩ rằng tôi đã có nó: https://github.com/rstudio/shiny/commit/0b469f09df7e2ca3bbdb2ddadc8473a8126a9431

Cho đến khi điều này được kiểm tra đúng và cuộn lại thành một build Shiny mới, bạn có thể kiểm tra nó bằng cách sử dụng DevTools để cài đặt trực tiếp từ GitHub:

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

Cảm ơn, vui mừng khi có một cố định!

+0

Tôi chắc chắn nó chỉ là một trường hợp của tôi chỉ cần mã hóa một cái gì đó không chính xác. Tôi cảm thấy rất vui khi tôi có thể giúp. Đã thấy phần "Tải xuống dữ liệu" mới. Cảm ơn một loạt vì đã tìm ra điều này! – user1854990

Các vấn đề liên quan