2016-10-19 8 views
1

同じ反応性のあるテキスト出力をR Shinyアプリケーションの複数の場所に表示したい。ここでは(単一Rマークダウン文書に)簡単な例です:Shinyの反応出力を繰り返す

--- 
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 1回。しかし、私がそのコードを残しておけば、同じテキストを2度表示することはできません。代わりに、最初のテキストが表示されます選択された文字:一度だけ、反応入力はbです。


完全性のために、回避策を提供するサンプルコード(2番目のチャンク)を追加します。

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") 
) 
) 
+2

同じIDを持つ2つの出力を持つことはできません。 –

+0

その情報をありがとう。あなたが答えとしてそれを提供すれば、私はそれを受け入れます。それが明示的に述べられている場所を指すことができますか? –

答えて

2

光沢のある入力/出力には一意のIDが必要です。シャイニーアプリでhttp://shiny.rstudio.com/articles/modules.html

入力と出力のIDからグローバル名前空間を共有し、意味の引用、 各IDは、アプリケーション全体で一意である必要があります。 UIを生成するために 関数を使用していて、これらの関数が入力を生成し、 の出力を生成する場合は、いずれのIDも衝突しないようにする必要があります。

シャイニーモジュールとネームスペースは、コードを整理して名前の衝突を避ける方法を提供します。

関連する問題