反应变量无法在 R Shiny 中自动呈现
Reactive variable cannot be rendered automatically in R Shiny
我正在用 R 语言的 Shiny 写一个在线 table,但是一些令人困惑的事情阻止了我。
我需要的是:
- 首次显示完整 table。
- 如果您在输入块中键入数字并提交,则只显示 table 自动.
的前 n 行
我看到的是:
DFflt
,table后面的变量,提交后已经改了,但是网页上的table需要手动刷新才能重新加载。
我该怎么做才能解决这个问题?谢谢!
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)
这应该会如您所愿:
library(shiny)
library(tidyverse)
DF <- 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) {
n_row <- eventReactive(input$submit, {
input$nrow
})
observe({
if (n_row() > 10) {
showNotification(str_c("Invalid ", type="error"))
}
})
output$table <- renderTable({
if(input$submit == 0){ # when the submit button is not clicked
DF
}else{
if (n_row() >= 0 & n_row() <= 10) {
DF %>% head(n_row())
}
}
})
observeEvent(input$p_DFflt, { print(DF)} )
}
shinyApp(ui, server)
我正在用 R 语言的 Shiny 写一个在线 table,但是一些令人困惑的事情阻止了我。
我需要的是:
- 首次显示完整 table。
- 如果您在输入块中键入数字并提交,则只显示 table 自动. 的前 n 行
我看到的是:
DFflt
,table后面的变量,提交后已经改了,但是网页上的table需要手动刷新才能重新加载。
我该怎么做才能解决这个问题?谢谢!
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)
这应该会如您所愿:
library(shiny)
library(tidyverse)
DF <- 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) {
n_row <- eventReactive(input$submit, {
input$nrow
})
observe({
if (n_row() > 10) {
showNotification(str_c("Invalid ", type="error"))
}
})
output$table <- renderTable({
if(input$submit == 0){ # when the submit button is not clicked
DF
}else{
if (n_row() >= 0 & n_row() <= 10) {
DF %>% head(n_row())
}
}
})
observeEvent(input$p_DFflt, { print(DF)} )
}
shinyApp(ui, server)