r - 如何在每次渲染闪亮的应用程序时停止重新创建数据集
问题描述
我有一个简单的闪亮应用程序,我在其中使用 selectInput()“Label”从数据表中选择一个 Label,然后使用 textInput()“Change to”更改其名称。问题是我希望应用程序保留我所做的所有名称更改,而不是在我选择另一个标签时返回默认名称。我认为问题在于 DF 仅存在于 rt4 函数中,而不存在于它之外,因此在每次渲染时都会重新创建它。
#ui.r
navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("book3"),
uiOutput("book6")
),
mainPanel(
DT::dataTableOutput("hot3")
)
)))
#server.r
library(shiny)
library(DT)
server <- function(input, output,session) {
output$book3<-renderUI({
selectInput("bk3",
"Label",
choices=(paste("Test",1:5)))
})
output$book6<-renderUI({
textInput("bk6", "Change to",
value=NULL
)
})
rt4<-reactive({
if(is.null(input$bk6)|input$bk6==""){
DF=data.frame(
Test=paste(1:5),
Label=paste("Test",1:5),
stringsAsFactors = FALSE)
}
else{
DF[DF==input$bk3]<-input$bk6
}
DF
})
output$hot3 <-DT::renderDataTable(
rt4(),
rownames= FALSE
)
}
解决方案
重要更改:
- 如您所料,DF
在服务器中定义一次,请参阅闪亮的范围规则
- 用于<<-
修改全局(服务器)DF
-isolate()
仅用于对更改做出反应input$bk6
library(shiny)
library(DT)
ui <- navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("book3"),
uiOutput("book6")
),
mainPanel(
DT::dataTableOutput("hot3")
)
)))
server <- function(input, output,session) {
DF <- data.frame(
Test=paste(1:5),
Label=paste("Test",1:5),
stringsAsFactors = FALSE)
output$book3<-renderUI({
selectInput("bk3", "Label", choices=(paste("Test",1:5)))
})
output$book6<-renderUI({
textInput("bk6", "Change to", value=NULL)
})
rt4<-reactive({
if(!is.null(input$bk6) && input$bk6!=""){
DF[DF$Label==isolate(input$bk3), "Test"] <<- input$bk6
}
DF
})
output$hot3 <-DT::renderDataTable(
rt4(),
rownames= FALSE
)
}
shinyApp(ui, server)
推荐阅读
- gpflow - 诱导变量的重塑 - GPflow
- sql - 创建没有重复的新 SQL 表
- javascript - 如何使用 Redux 只更新组件的一个实例?
- python - 如何将多个时间序列列转换为横截面数据?
- stripe-payments - 使用 SetupIntent 和 PaymentIntent 时,是否有等效于默认来源的方法?
- c# - 如何在 QnAMakerDialogbase 中获取 qna 响应:QnAMakerDialog
- python - 如何通过 Python 上的 Bitmex Websocket Api 接收实时数据?
- keycloak - Red Hat SSO 7.3.0.GA 的 Keycloak API 调用依赖项
- http - 戈朗。如何自动授权我的应用访问 spotify API?
- java - Intellij 中的 AWSToolkit,环境变量不起作用