2017-08-15 11 views
1

オブジェクト(または変数(サーバー側では変数)を作成し、ui checkboxGroupInputに渡す必要があります。私のファイルは少し複雑です。私はしようとしていますが、アプリケーションが何をしているのかは無意味です。ダイヤモンドのデータセットのサブセットdfを作成しました。私はui checkboxGroupInputに渡して、表示する列を選択できるようにしています。 ?。ここに私の質問私はUIに事前に感謝をDF裏を渡すんですかサーバーで生成されたオブジェクトを光沢のあるuiに戻します

は私app.rです:

library(shiny) 
library(ggplot2) 
library(DT) 

ui <- fluidPage(
    sidebarLayout(
     sidebarPanel(
      selectInput("nrow", label = h3("number of rows"), 
         choices = list(5, 10, 20), 
         selected = 5), 
      checkboxGroupInput("show_vars", "Columns in diamonds to show:", 
            names(df), selected = names(df)) 
     ), 
     mainPanel(
      DT::dataTableOutput("mytable1") 
      ) 
     ) 
    ) 


server <- function(input, output) { 

    # choose rows to display 
    df = diamonds[sample(nrow(diamonds), input$nrow), ] 

    output$mytable1 <- DT::renderDataTable({ 
     DT::datatable(df[, input$show_vars, drop = FALSE]) 
    }) 

} 

shinyApp(ui, server) 

エラーメッセージ:

Warning: Error in .getReactiveEnvironment()$currentContext: Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.) 

答えて

3

input$nrowをこの行の(エラーごとに)無効なコンテキスト外に使用しようとしているために表示される特定のエラーです。

df = diamonds[sample(nrow(diamonds), input$nrow), ] 

だから、これはまた、あなたがrenderUIuiOutput機能を使用して、サーバー内のUI要素を作成することができる反応性表現

のいくつかの並べ替えに移動する必要があります。そうすれば、サーバーからUIを簡単に制御できます。

library(shiny) 
library(ggplot2) 
library(DT) 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectInput("nrow", label = h3("number of rows"), 
        choices = list(5, 10, 20), 
        selected = 5), 
     uiOutput(outputId = "show_vars") 
    ), 
    mainPanel(
     DT::dataTableOutput("mytable1") 
    ) 
) 
) 


server <- function(input, output) { 

    # choose rows to display 
    df <- reactive({ 
    diamonds[sample(nrow(diamonds), input$nrow), ] 
    }) 

    output$show_vars <- renderUI({ 
    checkboxGroupInput("show_vars", "Columns in diamonds to show:", 
         names(df()), selected = names(df())) 
    }) 


    output$mytable1 <- DT::renderDataTable({ 
    DT::datatable(diamonds[, input$show_vars, drop = FALSE]) 
    }) 

} 

shinyApp(ui, server) 
+0

ありがとうございました!なぜ名前が必要なのですか(df())?名前ではない(df)? – zesla

+0

@zesla - 'df'は' reactive '関数なので、アクセスするには 'df()'を使う必要があります。 – SymbolixAU

関連する問題