r блестящий - Как отобразить переменное количество числовых входов - PullRequest
0 голосов
/ 05 июля 2018

Я хотел бы отобразить переменное количество входов на основе числового ввода "количество строк". Поскольку может быть потенциально большое количество строк, я не хочу использовать условную панель для каждой строки, и я предпочел бы выполнять итерации с функциями, как показано ниже:

ui <- fluidPage(
  lapply(1:3,function(iter1){
    fluidRow(
      column(2,
             h4(paste0("line", iter1))
      ),
      lapply(1:4,function(iter2){
        column(2,
               h4(paste0("Wind speed bin", iter2)),
               column(6, numericInput(paste0("v", iter1,"bin",iter2,"min"),"Vmin",5)),
               column(6, numericInput(paste0("v", iter1, "bin",iter2,"max"),"Vmax",6))
        )
      })
    )
  })  
)

Приведенный выше код позволяет отображать 4 определения скорости ветра в строке j (numericInput: vjbin1min, vjbin1max, vjbin2min, vjbin2max, ...) в 3 строках.

Обзор макета боковой панели

Теперь я бы хотел определить количество бинов [строк] с помощью переменной bin_nb [line_nb], как показано ниже:

lapply(1:bin_nb,function(iter1){...
lapply(1:line_nb,function(iter2){...

С двумя числовыми входами

numericInput("bin_nb","number of wind speed bins",value=4),    
numericInput("line_nb","number of lines",value=3)

Я пытался получить значение со стороны сервера

output$bin_nb <- renderText(input$bin_nb)

И используйте

lapply(1:textOutput("bin_nb"),function(iter1){...

Что, конечно, не работает, так как запрашивается числовое значение. Как я могу определить и использовать эти две числовые переменные bin_nb и line_nb?

1 Ответ

0 голосов
/ 05 июля 2018

Основываясь на комментарии BigDataScientist, вот подробное решение:

ui <- fluidPage(
  numericInput("line_nb","number of lines",value=3),
  numericInput("bin_nb","number of wind speed bins",value=4),
  uiOutput("input_panel")
)

И на стороне сервера:

server <- function(input, output) {
  output$input_panel <- renderUI({

    lapply(1:input$line_nb,function(iter1){
      fluidRow(
        column(2,
               h4(paste0("line", iter1))
        ),
        lapply(1:input$bin_nb,function(iter2){
          column(2,
                 h4(paste0("Wind speed bin", iter2)),
                 column(6, numericInput(paste0("v", iter1,"bin",iter2,"min"),"Vmin",5)),
                 column(6,numericInput(paste0("v", iter1, "bin",iter2,"max"),"Vmax",6))
          )
        })
      )
    })
  })    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...