在闪亮

时间:2016-10-19 21:22:28

标签: r shiny

我想在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")
  )
)

1 个答案:

答案 0 :(得分:2)

闪亮的输入/输出必须具有唯一的ID。引自http://shiny.rstudio.com/articles/modules.html

  

Shiny apps中的输入和输出ID共享一个全局命名空间,意思是,   每个ID在整个应用中必须是唯一的。如果你正在使用   用于生成UI的函数,这些函数生成输入和   输出,然后你需要确保没有任何ID冲突。

Shiny Modules和Namespaces提供了一种组织代码并避免名称冲突的方法。