我有一个简单的闪亮应用程序,其中使用numericInput()
“测试”将行添加到数据框。然后,将“标签”列的名称作为selectInput()
“标签2”的选项。问题是,当我编辑表的“标签”列中的名称时,selectInput()
选项不会相应地更新。例如,如果我在表中将“测试1”重命名为“测试A”,我也希望它在selectInput()中进行更改。
#ui.r
library(shiny)
library(rhandsontable)
ui <- navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("tex2")
),
mainPanel(
rHandsontableOutput("hot3"),
uiOutput("book12")
)
)))
#server.r
server <- function(input, output,session) {
output$tex2<-renderUI({
numericInput("text2", "#tests", value = 1, min=1)
})
output$book12<-renderUI({
selectInput("bk12",
"Label2",
choices=(rt4()$Label))
})
rt4<-reactive({
DF <- data.frame(
Label=paste("Test",1:input$text2),
stringsAsFactors = FALSE)
})
output$hot3 <-renderRHandsontable(
rhandsontable(rt4())
)
}
答案 0 :(得分:2)
这似乎有效。您没有回读编辑过的rhandsontable
在您的代码中。
为此,我添加了一个observe
observe({
if(!is.null(input$hot3))
rt4$DF <- hot_to_r(input$hot3)
})
在代码中,我还添加了一些req
语句以在初始化时检查NULL条件,还可以使用在其他一些问题中使用过的if..else机制。 / p>
#ui.r
library(shiny)
library(rhandsontable)
ui <- navbarPage(
"Application",
tabPanel("General",
sidebarLayout(
sidebarPanel(
uiOutput("tex2")
),
mainPanel(
rHandsontableOutput("hot3"),
uiOutput("book12")
)
)))
#server.r
server <- function(input, output,session) {
rt4<- reactiveValues()
output$tex2<-renderUI({
numericInput("text2", "#tests", value = 1, min=1)
})
output$book12<-renderUI({
selectInput("bk12",
"Label2",
choices=(rt4$DF$Label))
})
observe({
req(input$text2)
rt4$DF <- data.frame(
Test=paste(1:input$text2),
Label=paste("Test",1:isolate(input$text2)),
stringsAsFactors = FALSE)
})
output$hot3 <-renderRHandsontable({
req(input$text2)
rhandsontable(rt4$DF)
} )
observe({
if(!is.null(input$hot3))
rt4$DF <- hot_to_r(input$hot3)
})
}
shinyApp(ui,server)