我想在R Shiny应用中的多个位置显示相同的反应性文本输出。这是一个简单的例子(在单个R降价文档中):
---
output: html_document
runtime: shiny
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
```
```{r}
output$text1 <- renderText({
paste("Selected letter:", input$var)
})
fluidPage(
fluidRow(
selectInput("var", label="Choose a letter", choices=letters[1:4], selected="b")
),
fluidRow(
textOutput("text1")
),
fluidRow(
textOutput("text1")
)
)
```
如果我删除中间fluidRow(textOutput("text1")),
并且应用程序显示初始文本 所选字母: 和被动输入 b 一次。但是,如果我留下那段代码,它不会像我预期的那样两次显示相同的文本。相反,该应用仅显示初始文本 所选字母: ,而反应输入 b 完全没有。
为了完整起见,我正在添加提供解决方法的示例代码(用于第二个块)。
n <- 2
for(i in seq(n)) {
output[[paste0("text",i )]] <- renderText(paste("Selected letter:", input$var))
}
fluidPage(
fluidRow(
selectInput("var", label = "Choose a letter",
choices = letters[1:4], selected = "b")
),
fluidRow(
textOutput("text1")
),
fluidRow(
textOutput("text2")
)
)
答案 0 :(得分:2)
闪亮的输入/输出必须具有唯一的ID。引自http://shiny.rstudio.com/articles/modules.html
Shiny apps中的输入和输出ID共享一个全局命名空间,意思是, 每个ID在整个应用中必须是唯一的。如果你正在使用 用于生成UI的函数,这些函数生成输入和 输出,然后你需要确保没有任何ID冲突。
Shiny Modules和Namespaces提供了一种组织代码并避免名称冲突的方法。