如何在 R Shiny 的 UI 部分的矩阵中嵌入反应值?

How to embed a Reactive Value in a matrix in the UI section of R Shiny?

在下面的 MWE 代码中,我试图将反应值“periods”(从滑块输入生成并在服务器部分中定义)插入 [=28= 的第一行和第一列] 矩阵出现在 UI 部分。如下所示,第一个 row/column 矩阵的当前设置为“1”。我希望它与“周期”中的值相同,并且随着用户在顶部移动滑块所影响的周期变化而变化。

我确信这需要我对 Reactivity/observeEvent 有一定的熟练程度,而我还没有。这些参数我都骗过了,没用。

另请参阅下面的图片以更好地解释。

library(shiny) 
library(shinyMatrix)

ui <- fluidPage(style = "margin-top:10px;",
    column(3, 
        fluidRow(
             sliderInput("periods", "Nbr of periods (X):",min = 1, max = 120, value = 60)),
      
        fluidRow(
            
            matrixInput(
              "vector_input",
              label = "Generate matrix:",
              value = matrix(c(1, # << this 1 value needs to be reactive input$periods value
                               0.2), 
                         1, 2, dimnames = list(NULL, c("Y", "Z"))),
              rows = list(extend = TRUE,  names = FALSE),
              cols = list(extend = FALSE, names = TRUE, editableNames = FALSE),
              class = "numeric"),
            
            textOutput("selected_var") 
    )),
    column(9,))

server <- function(input, output) {
  
  output$selected_var <- renderText({paste("Number of periods: ", input$periods)})
 
  vals <- reactiveValues()
  observe({vals$periods <- input$periods})
  
  vector_input  <-  reactive(input$vector_input)
 
} # close server

shinyApp(ui = ui, server = server)

这是 运行 起草的代码和我正在尝试做的事情时出现的内容。在第二张图片中,我向用户展示了将周期输入从 60 更改为 20,以及我希望矩阵 Y 列的第一行如何反映该更改:

updateMatrixInput函数为您提供了一个简单的解决方案。将您当前的服务器功能替换为

server <- function(input, output, session) {
  output$selected_var <- renderText({paste("Number of periods: ", input$periods)})
  
  observeEvent(input$periods, {
    updateMatrixInput(session, "vector_input", value=matrix(c(input$periods, 0.2), 1, 2))
  })
}

而且我相信您已获得所需的功能。请注意 session 参数添加到 server 函数的定义中。