2017-03-11 53 views
0

我要定義「selectInput」輸入標籤而不指定每一個,但使用「唯一」給:如何使用'unique'爲Shiny輸入創建標籤?

Error in (function (choice, name) : 
     All sub-lists in "choices" must be named. 

示例代碼:

m <- sample(c('CT', 'MRI', 'US', 'XRAY'), size = 100, replace = TRUE) 
    ui <- fluidPage( 
     titlePanel("Rad Data"), 
     sidebarLayout(
     sidebarPanel(
      selectInput(inputId = 'modality', label = "Modality", choices = list(unique(m), selected = 'CT', selectize = FALSE)) 
     ), 
     mainPanel(outputPlot(outputId = 'distPlot')) 
     )) 

感謝您的任何意見。 rms

+0

爲「M」預定義或你想從你的數據動態生成它 – A5C1D2H2I1M1N2O1R2T1

+0

是的,m是數據幀變量。獨特的因素通常是我從4個樣本中抽樣出來的,但有時會添加一個或刪除一個,如果我不需要編輯selectInput選項,它將會更加優雅。 –

+0

然後我認爲一個被動的用戶界面就是你所追求的內容,由Kristoffer的回答覆蓋。 – A5C1D2H2I1M1N2O1R2T1

回答

1

據我所知,您希望selectInput中的項目是唯一的。在你的榜樣,你有太多的列表(m是列表,你choices = list(...將其封裝在另一個列表

試試這個:

m <- sample(c('CT', 'MRI', 'US', 'XRAY'), size = 100, replace = TRUE) 

shinyApp(
    ui = fluidPage( 
    titlePanel("Rad Data"), 
    sidebarLayout(
     sidebarPanel(
     selectInput(inputId = 'modality', label = "Modality", choices = unique(m), selected = 'CT', selectize = FALSE) 
    ), 
     mainPanel() 
)),  
    server = function(input, output) { 
    } 
) 

更新:如果要基於的選擇在data.frame你可以使用uiOutput和renderUI列最初由A5C1D2H2I1M1N2O1R2T1建議:

df <- data.frame(m = sample(c('CT', 'MRI', 'US', 'XRAY'), size = 100, replace = TRUE)) 

shinyApp(
    ui = fluidPage( 
    titlePanel("Rad Data"), 
    sidebarLayout(
     sidebarPanel(
     uiOutput("unique_modalities") 
    ), 
     mainPanel() 
)),  
    server = function(input, output) { 
    output$unique_modalities <- renderUI({ 
     selectInput(inputId = 'modality', label = "Modality", choices = unique(df$m), selected = 'CT', selectize = FALSE) 
    }) 
    } 
) 
相關問題