在 R/Shiny 中,如何使用操作按钮触发观察事件?
In R/Shiny, how do I trigger an Observe Event using an action button?
这是我之前post“R/Shiny中如何使用Action Button触发Observe Event功能的简化版和更清晰的版本?”
下面的代码在 Reactive 的基础上输出用户输入图,因此用户可以观看他的输入构建。情节需要保持反应(不链接到动作按钮的点击)。下面代码中的 Observe Event 从这些输入(称为“matrix_inputs.R”)中创建一个 R 对象,用于此处未显示的另一个 R 函数。我想让用户将该输入数据保存到 R 对象中(触发观察事件)仅当用户单击操作按钮时。然后,用户可以继续向输入矩阵输入更多数据,并在反应的基础上观察绘图变化,而无需更改 R 对象。如果用户在进行这些进一步更改后再次单击操作按钮,则更新后的数据将被保存并覆盖在 Observe Event 中创建的相同 R 对象。
我知道我应该在观察事件中插入“input$go, {...}”。它不在下面的代码中,因为如果我插入它,应用程序将无法运行,它会立即崩溃。我尝试了各种迭代,但没有成功。任何人对如何使这项工作有任何见解?保持绘图完全实时反应,同时将观察事件链接到操作按钮。
代码如下:
library(shiny)
library(shinyMatrix)
m <- matrix(c(1,1), 1, 2, dimnames = list(NULL, c("Y", "Z")))
ui <- fluidPage(
titlePanel("Vector Generator"),
sidebarPanel(
width = 6,
tags$h5(strong("Matrix inputs:")),
matrixInput("matrix_input",
value = m,
rows = list(extend = TRUE, names = TRUE, editableNames = TRUE),
cols = list(extend = FALSE, names = TRUE, editableNames = FALSE),
class = "numeric")
), # closes sidebarPanel
actionButton(inputId = "go",label = "Save data"),
mainPanel(
h5(strong("Plot of matrix inputs:")),
width = 6,plotOutput("graph"),
h5(strong("Table of matrix inputs:")),
tableOutput("view"),
) # closes main panel
) # closes user input (UI) section
server <- function(input, output, session) {
matrix_input <- reactive(input$matrix_input)
# Captures input data for further processing in R ----
observeEvent(matrix_input(), {matrix_input.R <<- unique(matrix_input())})
output$graph <- renderPlot({
plot(matrix_input(),type="b")
})
output$view <- renderTable({
matrix_input()
})
} # closes user server section
shinyApp(ui, server)
假设我对你的理解是正确的,并且你想在用户按下“Go”时渲染绘图,我只是为你的服务器尝试这个:
server <- function(input, output, session) {
matrix_input <- reactive(input$matrix_input)
# Captures input data for further processing in R ----
observeEvent(input$go, {
matrix_input.R <<- unique(matrix_input)
}
output$graph <- renderPlot({
plot(matrix_input(),type="b")
})
output$view <- renderTable({
matrix_input()
})
} # closes user server section
那应该 运行 当用户按下“开始”而不是之前
时的情节
这是我之前post“R/Shiny中如何使用Action Button触发Observe Event功能的简化版和更清晰的版本?”
下面的代码在 Reactive 的基础上输出用户输入图,因此用户可以观看他的输入构建。情节需要保持反应(不链接到动作按钮的点击)。下面代码中的 Observe Event 从这些输入(称为“matrix_inputs.R”)中创建一个 R 对象,用于此处未显示的另一个 R 函数。我想让用户将该输入数据保存到 R 对象中(触发观察事件)仅当用户单击操作按钮时。然后,用户可以继续向输入矩阵输入更多数据,并在反应的基础上观察绘图变化,而无需更改 R 对象。如果用户在进行这些进一步更改后再次单击操作按钮,则更新后的数据将被保存并覆盖在 Observe Event 中创建的相同 R 对象。
我知道我应该在观察事件中插入“input$go, {...}”。它不在下面的代码中,因为如果我插入它,应用程序将无法运行,它会立即崩溃。我尝试了各种迭代,但没有成功。任何人对如何使这项工作有任何见解?保持绘图完全实时反应,同时将观察事件链接到操作按钮。
代码如下:
library(shiny)
library(shinyMatrix)
m <- matrix(c(1,1), 1, 2, dimnames = list(NULL, c("Y", "Z")))
ui <- fluidPage(
titlePanel("Vector Generator"),
sidebarPanel(
width = 6,
tags$h5(strong("Matrix inputs:")),
matrixInput("matrix_input",
value = m,
rows = list(extend = TRUE, names = TRUE, editableNames = TRUE),
cols = list(extend = FALSE, names = TRUE, editableNames = FALSE),
class = "numeric")
), # closes sidebarPanel
actionButton(inputId = "go",label = "Save data"),
mainPanel(
h5(strong("Plot of matrix inputs:")),
width = 6,plotOutput("graph"),
h5(strong("Table of matrix inputs:")),
tableOutput("view"),
) # closes main panel
) # closes user input (UI) section
server <- function(input, output, session) {
matrix_input <- reactive(input$matrix_input)
# Captures input data for further processing in R ----
observeEvent(matrix_input(), {matrix_input.R <<- unique(matrix_input())})
output$graph <- renderPlot({
plot(matrix_input(),type="b")
})
output$view <- renderTable({
matrix_input()
})
} # closes user server section
shinyApp(ui, server)
假设我对你的理解是正确的,并且你想在用户按下“Go”时渲染绘图,我只是为你的服务器尝试这个:
server <- function(input, output, session) {
matrix_input <- reactive(input$matrix_input)
# Captures input data for further processing in R ----
observeEvent(input$go, {
matrix_input.R <<- unique(matrix_input)
}
output$graph <- renderPlot({
plot(matrix_input(),type="b")
})
output$view <- renderTable({
matrix_input()
})
} # closes user server section
那应该 运行 当用户按下“开始”而不是之前
时的情节