繁体   English   中英

如何在R Shiny中的renderUI的表格中显示输入框?

[英]How to display input boxes in a table from renderUI in R Shiny?

现在所有来自 uiOutput("prefs") 的数字输入框都显示在彼此下方。 我想让它们显示在更多类似组织的表格中,这样一些显示在彼此旁边和彼此下方。 我无法弄清楚如何做到这一点。 谢谢

用户界面

numericInput("inp1","Enter number of treatments:",min=1,3),
numericInput("numoc", "Enter number of outcomes:",min=1,3),
uiOutput("prefs")


服务器

option_vector<-c()

output$prefs <- renderUI({

        k= rep(c(1:input$numoc), times = input$inp1)
        for (g in 1:input$numoc) {
            option_vector<-append(option_vector, g)
        }

        mylist2 <- lapply(1:(input$numoc), function(i,y=k[[i]]) {

            pref_identifier <- paste("rank", i, sep="")
            pref_name<- paste("Outcome #",y,sep="")

            list(
                selectInput(pref_identifier,pref_name, option_vector)
            )
        })

        do.call(tagList, unlist(mylist2, recursive = FALSE))
    })

有几种方法可以做到这一点。 流畅的布局应该是最简单的方法。 它提供 12 列布局。 如果将每个输入控件包含在宽度为 6 的列中,则每行中有 2 个。 如果您想要 3,则将宽度从 6 减少到 4。

这种解决方案的优点是它适应了可用的宽度。 如果屏幕很窄,UI 元素将显示在另一个之下。 一旦有足够的空间,布局就会变为矩阵布局。

将您的renderUI调用中的最后两个语句( listdo.call )替换为:

    fluidRow(
      lapply(mylist2, function(x) column(6L, x))
    )

解决方案 2shinyMatrix package。 有了这个,您不需要定义每个 ui 元素。 调用 function shinyMatrix一次调用即可创建完整的矩阵,例如

matrixInput("myMatrix",
  value = diag(3),
  rows = list(names = FALSE), cols = list(names = FALSE),
  copy = TRUE, paste = TRUE
)

给你一个 3x3 的输入矩阵。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM