【发布时间】:2018-08-23 08:52:27
【问题描述】:
我有一个简单的闪亮应用程序,我在其中使用numericInput() 设置数据帧的行数。然后我使用selectInput()“标签”从数据表中选择标签,然后更改其名称使用 textInput() “更改为”。问题是每次我尝试使用textInput() 更改新标签的名称时,我修改的前一个标签都会返回默认名称。我相信这种情况正在发生,因为我的 DF 是在反应函数内部创建的,并且不能接受子集。我可能需要使用reactiveValues() 来存储以前的值,但我不知道如何使用它,所以我在这里使用reactive() 来显示一个工作示例。
library(shiny)
library(DT)
ui <- navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("tex2"),
uiOutput("book3"),
uiOutput("book6")
),
mainPanel(
DT::dataTableOutput("hot3")
)
)))
#server.r
server <- function(input, output,session) {
output$tex2<-renderUI({
numericInput("text2", "#tests", value = 1, min=1)
})
output$book3<-renderUI({
selectInput("bk3", "Label", choices=(paste("Test",1:input$text2)))
})
output$book6<-renderUI({
textInput("bk6", "Change to", value=NULL)
})
rt4<-reactive({
DF <- data.frame(
Test=paste(1:input$text2),
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
if(!is.null(input$bk6) && input$bk6!=""){
DF[DF$Label==isolate(input$bk3), "Label"] <- input$bk6
}
{
DF
}
})
output$hot3 <-DT::renderDataTable(
rt4(),
rownames= FALSE
)
}
【问题讨论】:
-
您可能会发现很难同时更新基于
input$text2和基于input$bk6的Label,因为它们当前正在相互覆盖 -
是的,但数据框也必须是动态的。如果这些可以使其正常工作,我愿意接受替代品。