2017-08-29 60 views
0

我想上傳一個列名爲Time的數據集。然後,代碼找到Time列的最大值,並將其除以4以找出有多少個大小爲4的區間,然後在selectInput中打印出該序列。這是我的代碼。它的作品,但在max(data()$Time)有一個小錯誤,我不明白爲什麼它給-inf。錯誤說no non-missing arguments to max; returning -Inf如何讀取和更新'selectInput'的值

下面是代碼:

library(shiny) 

ui <- fluidPage(

    fileInput(inputId = "uploadcsv","", accept = '.csv'), 
    selectInput("select", label = h3("Select box"), 
       choices = "", 
       selected = 1) 

) 

server <- function(input, output, session) { 

    data <- reactive({ 
    infile <- input$uploadedcsv 

    if (is.null(infile)) 
     return(NULL) 

    read.csv(infile$datapath, header = TRUE, sep = ",") 
    }) 

    observe({ 
    if (max(data()$Time) %% 4 == 0){ 
     numberofinterval <- max(data()$Time) %/% 4 
    } else { 
     numberofinterval <- (max(data()$Time) %/% 4)+1 
    } 

    NumPeriod <- seq(0, numberofinterval) 

    updateSelectInput(session, inputId = "select", 
          choices = NumPeriod, 
          selected = NumPeriod) 
    }) 

} 
shinyApp(ui = ui, server = server) 
+0

你可以嘗試格式化你的變量作爲日期'as.Date()',但除非你分享你的CSV,它或多或少的隨機猜測,... – BigDataScientist

回答

0

1)在data反應,你讀的輸入字段uploadedcsv,但在用戶界面,這就是所謂的uploadcsv(注意失蹤ed)。如果你使這個一致,上傳應該工作。

2)observe在應用程序啓動時運行;那時data()返回NULL,所以max(data()$Timemax(NULL),這是-Inf。您應該等到數據加載完畢。這樣做的一個辦法是改變observeobserveEvent

observeEvent(data, { # and so on... 

另一種選擇,就是保持observe和觀察者的開頭添加req(data)