2017-06-21 35 views
0

以下示例應用程序以用戶必須填寫的空表開始。我想在他爲Nation和City列選擇的值中增加一些依賴項,例如,如果他選擇Nation = Italy,當他點擊城市列時,只有米蘭和羅馬應該出現;反之,如果他首先選擇米蘭,意大利應該出現在自動完成列表中。 建議? 謝謝rhandsontable自動填充依賴列

library(rhandsontable) 
library(shiny) 

ui = fluidPage(rHandsontableOutput("data")) 

server = function(input,output) { 
df = data.frame(Nation = character(),City=character(),Num_Clients=integer()) 
values = reactiveValues(data = df) 

observe({ 
req(input$data) 
values$data = hot_to_r(input$data) 
}) 

output$data = renderRHandsontable({ 
rhandsontable(values$data, height=500, minRows=1,stretchH = "all") %>% 
hot_col(col="Nation",type="autocomplete",source=c("England","Spain","Mexico" ,"Italy"),strict=TRUE,allowInvalid=FALSE) %>% 
hot_col(col="City",type="autocomplete",source=c("Rome","Guadalajara","Madrid ","London","Milan"),strict=TRUE,allowInvalid=FALSE) %>% 
hot_validate_numeric(col = "Num_Clients", min = 0) 

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

回答

0

也許你可以沿着這條道路做一些事情:

library(rhandsontable) 
    library(shiny) 

    ui = fluidPage(rHandsontableOutput("data")) 

    server = function(input,output) { 
    df = data.frame(Nation = character(),City=character(),Num_Clients=integer()) 
    values = reactiveValues(data = df) 

    observe({ 
     req(input$data) 
     values$data = hot_to_r(input$data) 
    }) 

    output$data = renderRHandsontable({ 
     rhandsontable(values$data, height=500, minRows=1,stretchH = "all") %>% 
     hot_col(col="Nation",type="autocomplete",source=c("England","Spain","Mexico" ,"Italy"),strict=TRUE,allowInvalid=FALSE) %>% 
     hot_col(col="City",type="autocomplete",source=c("Rome","Guadalajara","Madrid ","London","Milan"),strict=TRUE,allowInvalid=FALSE) %>% 
     hot_validate_numeric(col = "Num_Clients", min = 0) 

    }) 


    observeEvent(input$data,{ 

     change <- unlist(input$data$changes$changes) 
     if(!is.null(change)){ 
     #Ifchange in the 1st column(0th Column) 
     if(as.numeric(change[2]) == 0){#If change in country filter the city 
      if(change[4] == "Italy"){#If itality is selected 
      output$data = renderRHandsontable({ 
       rhandsontable(values$data, height=500, minRows=1,stretchH = "all") %>% 
       hot_col(col="Nation",type="autocomplete",source=c("England","Spain","Mexico","Italy"),strict=TRUE,allowInvalid=FALSE) %>% 
       hot_col(col="City",type="autocomplete",source=c("Rome","Milan"),strict=TRUE,allowInvalid=FALSE) %>% 
       hot_validate_numeric(col = "Num_Clients", min = 0) 

      }) 
      } 
     } 
     } 

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

感謝您的回答。我想知道是否有更有效的方式爲每個國家和城市做到這一點,或者更一般地說,對於所有可能情況下的2列或更多列中的每個允許值,無需使用開關。 – Syl86

+0

也許在數據框中保存所有國家和城市,並根據用戶選擇的國家過濾城市? – SBista