循环创建FluidRows R闪亮

时间:2019-07-25 12:46:16

标签: r shiny

大家好??‍♂️

在闪亮的应用中创建输入时遇到问题。 我想创建一些fluidRows,它们都非常相似,只是输入ID和初始值不同。

我尝试了for循环,但是这些行根本没有建立。这是我尝试过的一个示例:

Init_vals <-c(1,2,3,4,5)

#Within fluidPage:

for( i in 1:5){
  fluidRow(
     textInput( inputId=paste0(“id”,i) ,
                      label = “”,
                      value = Init_vals[i]
                    )
}

肯定有一种无需手动创建多个fluidRows的方法吗?我想我一定会缺少一些东西,任何帮助将不胜感激。预先感谢

欢呼

2 个答案:

答案 0 :(得分:1)

我不认为您可以在应用程序的UI部分使用循环。我已经使用uiOutputrenderUI处理了类似的情况:

library(shiny)

ui <- fluidPage(
  uiOutput("ui1")
)

server <- function(input, output) {

  Init_vals <- 1:5

  output$ui1 <- renderUI({

    ui_parts <- c()

    for(i in 1:5){
      ui_parts[[i]] <- fluidRow(
        textInput(
          inputId=paste0("id",i) ,
          label = "here",
          value = Init_vals[i]
        )
      )
    }

    ui_parts

  })

}


shinyApp(ui = ui, server = server)

所有ui元素都是一些文本(通过将闪亮生成的UI元素保存到变量并在控制台中进行优先测试来进行测试),因此可以根据需要使用renderUI生成它们,此处保存它们循环访问列表。

答案 1 :(得分:0)

我之前已经从事过这项工作。我发现最好的解决方案是用一个multipleRows()自变量等于您想要的行数的函数来定义一个函数(例如n。另外,您可以添加一个content参数来填充您的fluidRow

但是,当我尝试执行此操作时,所有神奇的功能就是 do.call() 函数。它允许在 list 对象中输入所需的参数来调用renderUI()函数。

我自愿给出一个完整的书面答案,因为我发现这是理解Shiny中UI与服务器关系的有趣方法。

相关问题