如何在 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
函数的定义中。
在下面的 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
函数的定义中。