【发布时间】:2022-01-02 22:24:25
【问题描述】:
我正在用 R 语言的 Shiny 写一个在线表格,但是一些令人困惑的事情阻止了我。
我需要的是:
- 首次显示完整表格。
- 如果您在输入块中输入一个数字并提交,只需自动显示表格的前 n 行。
我看到的是:
DFflt,表格后面的变量,提交后已经更改,但是在手动刷新页面之前无法重新加载网页上的表格。
我可以做些什么来解决这个问题?谢谢!
library(shiny)
library(tidyverse)
DF <- mpg
DFflt <- mpg
ui <- fluidPage(
numericInput("nrow", "Slice the top n rows of DF", value = 0),
actionButton("submit", "Submit"),
actionButton("p_DFflt", "print DFflt in console"),
div('render DFflt:'),
tableOutput("table")
)
server <- function(input, output, session) {
observeEvent(input$submit, {
nrow <- input$nrow
if (nrow > 10) {
showNotification(str_c("Invalid", type="error")) }
else { DFflt <<- DF %>% head(nrow) }
})
observeEvent(input$p_DFflt, { print(DFflt)} )
output$table <- renderTable({DFflt})
}
shinyApp(ui, server)
【问题讨论】:
-
问题是您将 DFlft 定义为全局变量而不是反应变量(即 eventReactive() 或 reactive() 或 reactiveValues())。我建议你查看一些关于闪亮反应性的教程,你应该很容易解决你的问题
-
我想第一次显示完整的表格,所以我必须定义一个全局的
DFflt或设置一个默认的最大值nrow并使DFflt成为一个反应变量。后者有点丑所以我选择前者。有没有其他方法可以实现这个目标?
标签: r shiny tidyverse shiny-reactivity