2016-08-25 35 views
0

我的代碼是在這裏:在RShiny用戶界面,動態顯示幾個numericInput如何根據你選擇什麼樣

ui.R

shinyUI(fluidPage(

    # Copy the line below to make a select box 
    selectInput("select", label = h3("Select box"), 
       choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3), 
       selected = 1), 
    numericInput("value",label="value", value=100), 

    hr(), 
    fluidRow(column(3, verbatimTextOutput("value"))) 

)) 

server.R

server=shinyServer(function(input, output) { 
output$inputs=renderUI({ 
if(input$select =="1"){ 
    numericInput(inputId = paste0("value",1),"1",100) 

} else if(input$select=="2"){ 
    numericInput(inputId ="value","value",100), 
    numericInput(inputId ="value","value",200), 
    numericInput(inputId ="value","value",300) 
    } 

}) 

# You can access the value of the widget with input$select, e.g. 
output$value <- renderPrint({ input$select }) 

}) 

這是一個非常簡單的情況下,用戶界面是這樣的: enter image description here

我期望的是,如果我選擇「選擇2」,你會給我這個: enter image description here

那麼我怎麼能達到我的期望?

回答

1

我們根據您的選擇,以使其在服務器端

顯示1,2和3輸入

library(shiny) 
ui=shinyUI(fluidPage(

    # Copy the line below to make a select box 
    selectInput("select", label = h3("Select box"), 
       choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3), 
       selected = 1), 
    uiOutput("inputs"), 

    hr(), 
    fluidRow(column(3, verbatimTextOutput("value"))) 

)) 


server=shinyServer(function(input, output) { 
    output$inputs=renderUI({ 
    lapply(1:input$select,function(i){ 
     numericInput(inputId = paste0("value",i),paste0("value",i),100) 
    }) 
    }) 

    # You can access the value of the widget with input$select, e.g. 
    output$value <- renderPrint({ input$select }) 

}) 

shinyApp(ui,server) 

在那裏,我用簡單的邏輯:如果您的choise 1這樣一個輸入反饋,2--兩個輸入等

更新

硬代碼示例

server=shinyServer(function(input, output) { 
    output$inputs=renderUI({ 
    if(input$select==1){ 
     numericInput(inputId = paste0("value1"),paste0("value1"),100) 
    }else if(input$select==2){ 
     list(
     numericInput(inputId = paste0("value1"),paste0("value1"),100), 
     numericInput(inputId = paste0("value2"),paste0("value2"),200), 
     numericInput(inputId = paste0("value3"),paste0("value3"),500) 

    ) 
    }else if (input$select==3){ 
     numericInput(inputId = paste0("value1"),paste0("value1"),100) 
    } 

    }) 

    # You can access the value of the widget with input$select, e.g. 
    output$value <- renderPrint({ input$select }) 

}) 
+0

@實際上,當我選擇選擇1然後一個輸入,選擇2然後3輸入,然後選擇3然後只有1個輸入時,我知道lapply在你的例子中很有用,但我不確定在我的情況下有沒有簡單的方法。另外,當我有三個輸入選擇2,我想初始值是不同的。如100,500,500三個輸入。 –

+0

我試圖達到我的期望,但失敗了。我在原始文本中更新的代碼不起作用。 –

+0

你可以在很多方面做到這一點,例如硬編碼(見更新) – Batanichek

相關問題