2017-05-06 62 views
0

我正在處理我的第一個Shiny應用程序,試圖製作反應性barplot和表格,用戶可以在其中選擇要顯示的數據框的列,但是,當我運行應用程序閃亮的錯誤:在barplot中需要有限的'xlim'值

error: need finite 'xlim' values appear

我的數據不包含NA,它是一個數據幀,我可以使用普通的r命令構建無反應的圖。

我的代碼看起來像這樣

library(shiny) 
ui <- fluidPage( 
    plotOutput(outputId = "bar_1"), 
    tableOutput(outputId = "table_1"), 
    selectInput("variable", "Select variable", c("colA"="colA", "colB"="colB", "colC"="Col C")) 
) 

server <- function(input, output) { 
    output$bar_1<-renderPlot(barplot(table(Book1$'input$variable'))) 
    output$table1<-renderTable(table(Book1$'input$variable')) 
} 

shinyApp(ui = ui, server = server) 

控制檯顯示

Warning in min(w.l) : no non-missing arguments to min; returning Inf 
Warning in max(w.r) : no non-missing arguments to max; returning -Inf 
Warning in min(x) : no non-missing arguments to min; returning Inf 
Warning in max(x) : no non-missing arguments to max; returning -Inf 
Warning: Error in plot.window: need finite 'xlim' values 
Stack trace (innermost first): 
    79: plot.window 
    78: barplot.default 
    77: barplot 
    76: renderPlot 
    68: output$bar_1 
    1: runApp 

感謝您的幫助!

回答

0

對於最小可重複的例子,輸出dput(head(Book1))也是有幫助的。 這樣,它更容易幫助

但在你的情況下,它似乎是索引的列。請嘗試以下

server <- function(input, output) { 
    output$bar_1<-renderPlot(barplot(table(Book1[input$variable]))) 
    output$table1<-renderTable(table(Book1[input$variable])) 
} 

或稍微更有效

server <- function(input, output) { 
    current.data <- table(Book1[input$variable]) 
    output$bar_1<-renderPlot(barplot(current.data)) 
    output$table1<-renderTable(current.data) 
} 
+0

你可能需要把輸入變量$雙方括號內(即第一冊[輸入變量$]])這個工作。如果應用程序變得更大,您還應該考慮將Book1 [[input $ variable]]移動到它自己的反應表達式。這是因爲每次輸入更新只需執行一次操作。目前它正在做兩次。 – Gladwell

+0

你能解釋我如何做到這一點?謝謝 –

+0

它的工作!爲什麼在函數響應時不使用$而使用方括號?我有沒有睡過教程? –