我正在开发下面的Shinny应用程序,但我经历了如下困难:
当我在文本框中添加两个名称,如Magnolia_grandiflora,和Magnolia_ovata,时,我希望应用程序按如下方式打印这些输入名称:
选定的外部组: Magnolia_grandiflora Magnolia_ovata
但是,该应用程序只打印最后一个输入名,并删除第一个输入名。我希望应用程序总是打印新添加的名字。
此外,如果我想在我的应用程序中使用字符串(向量),如何访问所有这些输入名称的字符串(向量)?例如,我需要所有输入名称的向量作为另一个函数的参数。
非常感谢!
多明戈斯
ui <- fluidPage(
sidebarPanel(
textInput("outgroups", "Select outgroup taxa", ""),
actionButton("addoutgroup", "Add"),
br(),
br(),
mainPanel(
htmlOutput("text")
)
)
)
server <- function(input, output,session) {
observeEvent(input$addoutgroup, {
n <- isolate(input$addoutgroup)
if (n == 0) return()
# create n-th pair of text input and output
output[[paste0("ui", n)]] <- renderUI(
list(textInput(paste0("textin", n), isolate(input$outgroups)),
textOutput(paste0("textout", n))))
updateTextInput(session,"outgroups", value="")
})
output$text <- renderUI({
str1 <- paste("Number of selected outgroups:", input$addoutgroup)
str2 <- paste("Outgroups selected:", isolate(input$outgroups))
HTML(paste(str1, str2, sep = '<br/>'))
})
}
shinyApp(ui, server)发布于 2020-10-15 12:27:51
这是一个你可以尝试的工作演示。
我会考虑使用reactiveValues来存储您输入的物种名称。在这种情况下,可以让rv$outgroup成为存储名称的向量。
输入新名称时,可以将c() (当前存储的rv$outgroup )与新名称组合。
然后,您可以以rv$outgroup的形式访问向量中的所有名称。
还请注意,我将mainPanel迁移到ui中的sidebarPanel之外。
library(shiny)
ui <- fluidPage(
sidebarPanel(
textInput("outgroups", "Select outgroup taxa", ""),
actionButton("addoutgroup", "Add"),
br(),
br()
),
mainPanel(
htmlOutput("text")
)
)
server <- function(input, output, session) {
rv <- reactiveValues(outgroup = NULL)
observeEvent(input$addoutgroup, {
rv$outgroup <- c(rv$outgroup, input$outgroups)
updateTextInput(session, "outgroups", value="")
})
output$text <- renderUI({
str1 <- paste("Number of selected outgroups:", length(rv$outgroup))
str2 <- paste("Outgroups selected:", paste(rv$outgroup, collapse = " "))
HTML(paste(str1, str2, sep = '<br/>'))
})
}
shinyApp(ui, server)https://stackoverflow.com/questions/64360072
复制相似问题