2015-11-26 81 views
0

我有一樣的下面的圖片和數據表,當我點擊一個隨機行,應用程序會崩潰,我收到以下錯誤消息:選擇在數據表中的行

Data Table

Warning in widgetFunc() : 
    renderDataTable ignores ... arguments when expr yields a datatable object; see ?renderDataTable 
Warning: Unhandled error in observer: (list) object cannot be coerced to type 'logical' 
observeEvent(input$responses_rows_selected) 
ERROR: [on_request_read] connection reset by peer 

我不確定這個錯誤信息的含義。

server.r

CreateDefaultRecord <- function() { 
    mydefault <- CastData(list(id = "0", name = "", used_shiny = FALSE, r_num_years = 4)) 
    return (mydefault) 
} 


CastData <- function(data) { 
    datar <- data.frame(name = data["name"], 
         used_shiny = as.logical(data["used_shiny"]), 
         r_num_years = as.integer(data["r_num_years"]), 
         stringsAsFactors = FALSE) 

    rownames(datar) <- data["id"] 
    return (datar) 
} 

UpdateInputs <- function(data, session) { 
    updateTextInput(session, "id", value = unname(rownames(data))) 
    updateTextInput(session, "name", value = unname(data["name"])) 
    updateCheckboxInput(session, "used_shiny", value = as.logical(data["used_shiny"])) 
    updateSliderInput(session, "r_num_years", value = as.integer(data["r_num_years"])) 
} 

     # Select row in table -> show details in inputs 
     observeEvent(input$responses_rows_selected, { 
     if (length(input$responses_rows_selected) > 0) { 
      data <- ReadData()[input$responses_rows_selected, ] 
      UpdateInputs(data, session) 
     } 

     }) 

    # display table 

     output$responses <- DT::renderDataTable({ 

     #update after submit is clicked 
     input$submit 
     #update after delete is clicked 
     input$delete 
     DT::datatable(ReadData(), options = list(pageLength=3),colnames = c('ID' = 1), class = 'cell-border stripe') 
     }, server = FALSE, selection = "single", 
     colnames = unname(GetTableMetadata()$fields)[-1] 
    ) 
+0

只是出於好奇:你爲什麼不使用 '觀察({如果(長度(輸入$ responses_rows_selected)> 0){ data < - ReadData()[input $ respond_rows_selected,] UpdateInputs(data,session) } })' 而不是'observeEvent'? – Vongo

+0

如果在兩種情況下使用observe或observEvent,我都會得到相同的警告。 – user

回答

1

可以查詢input$responses_rows_selected類型? 在你的data <- ReadData()[input$responses_rows_selected, ],input$responses_rows_selected既不是一個邏輯或數字向量告訴R如何子集你的表。 也許Shiny只是將input$responses_rows_selected作爲一個字符向量(正如它通常那樣),或者相當令人驚訝的是,將錯誤提及((list) object cannot be coerced to type 'logical')作爲列表。

+0

我已經更新了我的數據,因爲您可以看到used_shiny的類型是合乎邏輯的。我該怎麼辦才能解決這個問題? – user

1

問題是因爲在數據表中多行選擇。 我只是添加

selection = "single" 

在DT ::數據表()

DT::datatable(ReadData(),extensions = 'Responsive', options = list(pageLength=3),colnames = c('ID' = 1), class = 'cell-border stripe', selection = "single")