R Shiny如何给模态对话框添加滚动功能避免shinyMatrix矩阵压缩
问题描述
运行如下MWE代码时,如底部图片所示,用户在模态对话框渲染的矩阵中进行输入会导致矩阵被压缩。用户输入的矩阵列数越多,压缩程度越高,最终矩阵会难以阅读。
是否可以在新增列时不让矩阵压缩,而是向右延伸,由用户通过滚动条进行左右导航?我今日尝试插入滚动条但尚未成功。
该问题可能源于shinyMatrix包本身。考虑到DT Table展示效果好且自带滚动功能,能否将shinyMatrix作为输入输出的后端引擎,前端改用DT Table实现?rhandsontable包虽然界面美观,但在模态对话框中运行效果不佳。
MWE示例代码
library(shiny) library(shinyMatrix) ui <- fluidPage( sidebarLayout( sidebarPanel( uiOutput("panel"), actionButton("show2nd","Show 2nd input (in modal)") ), mainPanel(plotOutput("plot1")) ) ) server <- function(input, output, session){ output$panel <- renderUI({ tagList( matrixInput("input1", value = matrix(c(10,5), 1, 2, dimnames = list(c("1st input"),c("X|Y",""))), rows = list(extend = FALSE, names = TRUE), cols = list(extend = FALSE, delta = 1, delete = FALSE, names = TRUE, editableNames = FALSE, multiheader=TRUE), class = "numeric"), helpText("Generate curves (X|Y):"), ) }) observeEvent(input$show2nd,{ showModal( modalDialog( matrixInput("input2", value = if(isTruthy(input$input2)){input$input2} else {matrix(c(input$input1[1,1],input$input1[1,2]), 1, 2, dimnames = list(c("2nd input"),c("X|Y","")))}, rows = list(extend = FALSE, names = TRUE), cols = list(extend = TRUE, delta = 2, delete = TRUE, names = TRUE, editableNames = FALSE, multiheader=TRUE ), class = "numeric"), footer = modalButton("Close") )) }) observe({ req(input$input2) mm <- input$input2 colnames(mm) <- trunc(1:ncol(mm)/2)+1 isolate(updateMatrixInput(session, "input2", mm)) }) output$plot1 <-renderPlot({ req(input$input1) plot(rep(if(isTruthy(input$input2)){input$input2[1,2]} else {input$input1[1,2]}, times=10),ylab = "y") }) } shinyApp(ui, server)
参考示意图
矩阵压缩效果

模态输入框滚动效果参考


内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072
相关产品推荐
相关产品推荐

