Как добавить столбцы во входную матрицу без уменьшения размера матрицы в r shiny?

#r #user-interface #matrix #shiny #user-input

#r #пользовательский интерфейс #матрица #блестящий #пользовательский ввод

Вопрос:

Всякий раз, когда я добавляю столбцы в матрицу, столбцы уменьшаются в ширину, пока не станут слишком маленькими. Есть ли способ увеличить ширину страницы, чтобы столбцы матрицы не уменьшались? Спасибо

   output$mat <- renderUI({
        rw<-list(1:input$numoc)
        for (i in (1:input$numoc)) {
            rw[[1]][[i]] = paste("Outcome", i, sep=" ")
        }
 

        clm<-list(1:input$inp1)
        for (i in (1:input$inp1)) {
            clm[[1]][[i]] = paste("Treatment", i, sep=" ")
        }

        matrix1 <- matrix(seq(from=1, to=((input$numoc)*(input$inp1)), by=1), input$inp1, input$numoc, dimnames = list(clm[[1]],rw[[1]]))
        
        matrixInput("mat", "Probabilities", matrix1, rows=list(names=TRUE), cols=list(names=TRUE))
    })
 

Ответ №1:

Это возможно с помощью CSS. Как только мы перезаписали table-layout: fixed; HTML-элемент table , ячейки заголовка реагируют на min-width атрибут. Вы можете адаптировать минимальную ширину к вашим потребностям.

Убедитесь, что вы используете правильный inputID выбор таблицы HTML. В CSS идентификатору предшествует # .

Недостаток (конечно): в какой-то момент вы получаете горизонтальную полосу прокрутки.

 library(shiny)
library(shinyMatrix)

# Define UI for application that draws a histogram
ui <- fluidPage(

  tags$head(
    tags$style(HTML(
        "div#mat table {
          table-layout: auto;
        }
        div#mat .matrix-input-col-header-cell div {
          min-width: 100px;
        }"
      ))),

    # Application title
    titlePanel("Min Col Width"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("numoc", "Number of bins:",
                        min = 1, max = 50, value = 5),
            numericInput("inp1", "Inp1", 1)
        ),

        mainPanel(
           uiOutput("mat") # show the matrix
        )
    )
)

# Server as provided by the asker
server <- function(input, output) {

  output$mat <- renderUI({
    rw <- list(1:input$numoc)
    for (i in (1:input$numoc)) {
      rw[[1]][[i]] <- paste("Outcome", i, sep = " ")
    }
    
    
    clm <- list(1:input$inp1)
    for (i in (1:input$inp1)) {
      clm[[1]][[i]] <- paste("Treatment", i, sep = " ")
    }
    
    matrix1 <- matrix(seq(from=1, to=((input$numoc)*(input$inp1)), by=1), input$inp1, input$numoc, dimnames = list(clm[[1]],rw[[1]]))
    
    matrixInput("mat", "Probabilities", matrix1, rows=list(names=TRUE), cols=list(names=TRUE))
  })
  
}

shinyApp(ui = ui, server = server)
 

Я протестировал этот образец в Firefox и R-Studio App Viewer.

Комментарии:

1. Это работает отлично! Большое спасибо! Я думал, что может быть способ переопределить ширину страницы с помощью css, но я не был уверен, как это сделать. Спасибо!