【发布时间】:2019-06-05 19:28:23
【问题描述】:
我无法减少冗长的 if-else 语句。在我的 Shiny 应用程序中,用户输入“num_fact”(因子的数量)的值,该值通过代码多次使用以动态生成 UI 元素。
我已经尝试使用 lapply(),但我无法让它工作。
根据因素的数量,创建两个动态 UI 元素(级别和处理),每个元素的输入数量与因素的数量相同。我想从这些 UI 元素中提取值。
以下代码有效。
if (num_fact == 1) {
levels <- c(input$n_F1)
treatments <- c((input$t_F1)/100)
} else if (num_fact == 2) {
levels <- c(input$n_F1, input$n_F2)
treatments <- c((input$t_F1)/100, (input$t_F2)/100)
} else if (num_fact == 3) {
levels <- c(input$n_F1, input$n_F2, input$n_F3)
treatments <- c((input$t_F1)/100, (input$t_F2)/100, (input$t_F3)/100)
} else if (num_fact == 4) {
levels <- c(input$n_F1, input$n_F2, input$n_F3, input$n_F4)
treatments <- c((input$t_F1)/100, (input$t_F2)/100, (input$t_F3)/100, (input$t_F4)/100)
}
但它很长,我想改进它。我已经成功应用 lapply() 来根据因子的数量动态生成 UI 元素,如下:
output$ui_factor_levels <- renderUI({
req(input$num_fact)
fluidRow(
lapply(1:(as.numeric(input$num_fact)), function(i) {
column(4, numericInput(paste0("n_F", i), h5(paste0("Factor ", i)), value = 2))
})
)
})
我似乎无法将 if-else 语句用作 apply() 函数。我认为我的问题与水平和治疗的生成方式有关。
【问题讨论】:
标签: r if-statement dynamic shiny apply