大家好??♂️
在闪亮的应用中创建输入时遇到问题。 我想创建一些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的方法吗?我想我一定会缺少一些东西,任何帮助将不胜感激。预先感谢
欢呼
答案 0 :(得分:1)
我不认为您可以在应用程序的UI部分使用循环。我已经使用uiOutput
和renderUI
处理了类似的情况:
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与服务器关系的有趣方法。