2017-06-21 2 views
0

Die folgende Beispielanwendung beginnt mit einer leeren Tabelle, die der Benutzer ausfüllen muss. Ich möchte einige Abhängigkeiten in den Werten hinzufügen, die er für die Spalte Nation und Stadt wählen könnte. Wenn er beispielsweise Nation = Italien wählt, wenn er auf die Spalte Stadt klickt, sollten nur Mailand und Rom erscheinen. Umgekehrt, wenn er zuerst Mailand auswählt, sollte nur Italien in der Autovervollständigungsliste erscheinen. Vorschläge? Dankerhandsontable autocomplete abhängige Spalten

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) 

Antwort

0

Vielleicht haben Sie etwas auf diesem Weg tun könnte:

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

Danke für die Antwort. Ich frage mich, ob es einen effizienteren Weg gibt, dies für jede Nation und Stadt zu tun, oder allgemeiner für jeden erlaubten Wert in 2 oder mehr Spalten eines handsontable, ohne einen Schalter für alle möglichen Fälle zu verwenden. – Syl86

+0

Speichern Sie möglicherweise die gesamte Nation und die Stadt in einem Datenrahmen und filtern Sie die Städte basierend auf der ausgewählten Nation des Nutzers. – SBista