Hãy nói rằng tôi có file server.R sau trong sáng bóng:Đặt đối tượng toàn cầu trong Shiny
shinyServer(function(input, output) {
output$plot <- renderPlot({
data2 <- data[data$x == input$z, ] # subsetting large dataframe
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ] # same subset. Oh, boy...
summary(data2$x)
})
})
Những gì tôi có thể làm để không phải chạy data2 <- data[data$x == input$z, ]
trong mỗi cuộc gọi render? Nếu tôi làm như sau, tôi nhận được lỗi "đối tượng thuộc loại 'đóng' không được đặt":
shinyServer(function(input, output) {
data2 <- reactive(data[data$x == input$z, ])
output$plot <- renderPlot({
plot(data2$x, data2$y)
})
output$table <- renderTable({
data2 <- data[data$x == input$z, ]
summary(data2$x)
})
})
Tôi đã làm gì sai?
Cảm ơn sự giúp đỡ, tôi rất mới với Shiny (đó là ngày thứ hai của tôi làm việc với nó). Giải pháp của bạn hoạt động, nhưng không phải khi tôi chèn một 'ifelse()' vào trong tập con của tôi, mà thực sự là một cái gì đó như thế này: 'data2 <- reactive (ifelse (input $ z == '', data, data [data $ x == đầu vào $ z,])) '. Khi tôi làm điều này, tôi nhận được lỗi sau: 'Lỗi trong plot.window (xlim, ylim, log = log, ...): cần các giá trị 'xlim' hữu hạn'. –
BTW, tôi đang hướng dẫn với RStudio (ít nhất là các phần cơ bản) và dự định đào sâu hơn vào nó và tài liệu gói theo thời gian. –
@wleoncio rằng lỗi gần như chắc chắn là vì bạn đang chuyển một 'data.frame' trống vào lô. Vì vậy, tôi sẽ đề nghị làm một số gỡ lỗi để tìm ra nếu 'data2' trả về những gì bạn mong đợi. Bạn cũng có thể thêm vào các kiểm tra trong hàm đầu ra lô của bạn như 'if (nrow (newData) == 0) return()' sẽ giữ cho nó không cố định nếu không có dữ liệu. Trong khi tôi đang làm việc trên một ứng dụng sáng bóng, tôi thích thêm một bảng, để được nhận xét sau này, điều đó sẽ chỉ in các giá trị gỡ lỗi khác nhau (tức là số hàng trong dữ liệu hiện tại, mức của một biến nhất định, v.v.) –