2017-06-30 12 views
1

私は光り輝いていますが(Rではない)、ユーザーがテーブルから特定の行を選択してcsvファイルに書き出すアプリケーションを開発しています。本質的に減少したこの表には、2つの要因の列と1つの反応の列があります。例えば Rシャイニー - ラジオボタンとチェックボックスからの入力をまとめました

enter image description here

もともと、私は、ユーザーが、彼らがエクスポートする行を選択するために使用することができdataFactor2列の値に基づいて、サイドバーにあるチェックボックスを持っていた場所に設定アプリを持っていました。たとえば、dataFactor2 == A、G、およびJのテーブル行をエクスポートするように選択できます。ただし、dataFactor1およびdataFactor2レベルが大量の場合は扱いにくくなりました。

私の考えは、dataFactor1のレベルにラジオボタンを追加することでした。次に、dataFactor1 == Xのラジオボタンを選択した場合、A、B、Cのチェックボックスが表示され、テーブルにはdataFactor1 == Xの行のみが表示されます。 Cの場合は、YとZに移動します。プロセスの最後に、選択したレベルのdataFactor2に対応する行を引き続きエクスポートします。

しかし、このように実装しようとすると、あるレベルのdataFactor1から次のレベルに移動するとすべてがリセットされます。どのようにすべてのチェックボックスをキャプチャするための任意の提案? ui.Rについては、以下の

サンプルコード:

#ui.R 

library(shiny) 

myFactor1<-c("X", "Y", "Z") 
myFactor2<-c() #initialize 

shinyUI(fluidPage(

    titlePanel("Sample"), 

    # Sidebar with radio buttons and checkboxes 
    sidebarLayout(
    sidebarPanel(width=2, 

     #display radio button list of factor1 values 
     radioButtons("factor1", 
        label = "dataFactor1", 
        choices=myFactor1), #dynamically generate factor list 

     #display checkboxes of factor2 values 
     checkboxGroupInput("factor2", 
         label="dataFactor2", 
         choices=myFactor2) #dynamically generate list 

    ), 

    # Show factor2 selections and table 
    mainPanel(

     textOutput("text2"), 
     tableOutput("table2") 


) 

) 

)) 

とserver.R:

#server.R 
library(shiny) 

shinyServer(function(input, output, session) { 

    mydata<-data.frame(dataFactor1=c(rep("X", 3), rep("Y", 4), rep("Z", 5)), 
        dataFactor2=c("A", "B", "C", "D", "E", "F", "G", "H", 
            "I", "J", "K", "L"), 
        dataResponse=rnorm(12)) 

    observe({ 
     factor1Choice<-input$factor1 

     myFactor2_list<-mydata$dataFactor2[mydata$dataFactor1==factor1Choice] 

     updateCheckboxGroupInput(session, "factor2", 
           choices = myFactor2_list) 

     mydata2<-mydata[mydata$dataFactor1==factor1Choice,] 

     output$table2<-renderTable(mydata2) 

     observe({ 
      factor2Choice<-input$factor2 
      output$text2<-renderText(factor2Choice) 

     }) 

    }) 

}) 
+0

私は数週間前に[同様の質問](https://stackoverflow.com/questions/44478182/how-to-access-remember-unchecked-values-in-shiny)を有していました。 – lukeA

答えて

1

すべてにチェックボックスをキャプチャする方法のための任意の提案ですか?両方に関して

hereに答え、あなたは(間に合わせ&)を行うことができます:

myFactor1<-c("X", "Y", "Z") 
myFactor2<-c() #initialize 

ui <- fluidPage(

    titlePanel("Sample"), 

    # Sidebar with radio buttons and checkboxes 
    sidebarLayout(
    sidebarPanel(width=2, 

     #display radio button list of factor1 values 
     radioButtons("factor1", 
        label = "dataFactor1", 
        choices=myFactor1), #dynamically generate factor list 

     #display checkboxes of factor2 values 
     checkboxGroupInput("factor2", 
         label="dataFactor2", 
         choices=myFactor2) #dynamically generate list 

    ), 

    # Show factor2 selections and table 
    mainPanel(

     textOutput("text2"), 
     tableOutput("table2") 


) 

) 

) 


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

    mydata<-data.frame(dataFactor1=c(rep("X", 3), rep("Y", 4), rep("Z", 5)), 
        dataFactor2=c("A", "B", "C", "D", "E", "F", "G", "H", 
            "I", "J", "K", "L"), 
        dataResponse=rnorm(12)) 

    values <- reactiveValues(cb = with(mydata, setNames(rep(FALSE, nlevels(dataFactor2)), levels(dataFactor2)))) 

    observeEvent(input$factor2, { 
    myFactor2_list<-mydata$dataFactor2[mydata$dataFactor1==input$factor1] 
    values$cb[myFactor2_list] <- myFactor2_list %in% input$factor2 
    }) 

    observe({ 
     factor1Choice<-input$factor1 

     myFactor2_list<-mydata$dataFactor2[mydata$dataFactor1==factor1Choice] 

     updateCheckboxGroupInput(session, "factor2", 
           choices = myFactor2_list, 
           selected = levels(mydata$dataFactor2)[values$cb]) 

     mydata2<-mydata[mydata$dataFactor1==factor1Choice,] 

     output$table2<-renderTable(mydata2) 

     observe({ 
      factor2Choice<-input$factor2 
      output$text2<-renderText(factor2Choice) 

     }) 

    }) 

} 
shinyApp(ui, server) 

一般的なセットアップは別の問題である - 私はthese shiny sessionsは非常に興味深く、役に立ちました。

+0

ありがとう、@lukeA。これは私がやろうとしていることにかなり近いようです!私は休日の週末にもう少しこれで遊ぶつもりです。 – Wissenschaftler

1

ここでは、選択肢を格納するリストを使用した解決策があります。選択したすべてのチェックボックスは、unlistを使用して復元されます。

library(shiny) 

myFactor1<-c("X", "Y", "Z") 

ui <- shinyUI(fluidPage(
    titlePanel("Sample"), 
    # Sidebar with radio buttons and checkboxes 
    sidebarLayout(
    sidebarPanel(width=2, 
     #display radio button list of factor1 values 
     radioButtons("factor1", 
        label = "dataFactor1", 
        choices=myFactor1), #dynamically generate factor list 
     #display checkboxes of factor2 values 
     checkboxGroupInput("factor2", label="dataFactor2") 
    ), 
    # Show factor2 selections and table 
    mainPanel(
     textOutput("text2"), 
     tableOutput("table2"), 
     p("All selections:"), 
     textOutput("text3") 
    ) 
) 
)) 

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

    mydata<-data.frame(dataFactor1=c(rep("X", 3), rep("Y", 4), rep("Z", 5)), 
        dataFactor2=c("A", "B", "C", "D", "E", "F", "G", "H", 
            "I", "J", "K", "L"), 
        dataResponse=rnorm(12)) 

    # to store selections 
    mySelection <- list() 

    observeEvent(input$factor1, { 
    factor1Choice<-input$factor1 
    myFactor2_list<-mydata$dataFactor2[mydata$dataFactor1==factor1Choice] 

    updateCheckboxGroupInput(session, "factor2", 
          choices = myFactor2_list, 
          # update with stored selections 
          selected = mySelection[[input$factor1]]) 

    mydata2<-mydata[mydata$dataFactor1==factor1Choice,] 

    output$table2<-renderTable(mydata2) 

    }) 

    observeEvent(input$factor2, { 
    # backup the selection 
    mySelection[[input$factor1]] <<- input$factor2 
    output$text2 <- renderText(mySelection[[input$factor1]])  
    # get all selections 
    output$text3 <- renderText(unlist(mySelection))  
    }) 

}) 

shinyApp(ui, server) 
+0

ありがとう、@ Geovany。これは私がしようとしていたものに近いように見えますが、チェックされ、チェックされていない要素は削除されていないようです(たとえば、ユーザーが1つの列を選択してから別の列を選択した場合)。 – Wissenschaftler

関連する問題