シャイニーで入力が適切でない場合はボックスを非表示にします

ジャッカー

シャイニーとシャイニーダッシュボードを使用しています。すべてまたはほとんどのボックス/プロットを非表示にしたい場合がいくつかあります。

  1. 日付範囲が不可能な場合(つまり、終了日が開始日より前である場合)。
  2. 入力を選択した場合は、サンプルサイズが小さすぎます。

問題1では、すべてのボックスを非表示にして、エラーメッセージを返したいだけです。第2号では、上部にいくつかの情報ボックス(サンプルサイズなど)を表示したいのですが、残りのボックスはすべて非表示にします。

現在、最初の条件に対してvalidateを使用してエラーメッセージを生成しています。また、validateを使用して、これが発生したときにプロットの実行を停止しています。ただし、これはボックスが空であってもボックスを残します。これは非常に醜くて厄介です。

私はおそらくすべてのボックスをconditionalPanelに入れることができると思いますが、それは非常に反復的であるように見えます-確かにすべての(またはグループの)ボックスに引数を渡すより簡単な方法がありますか?このコードは一例です-私が取り組んでいるアプリにはもっとたくさんのボックスがあります。

コード例:

library(shiny)
library(shinydashboard)
library(tidyverse)


random_data <- data.frame(replicate(2, sample(0:10, 1000, rep=TRUE)))
set.seed(1984)
random_data$date <- sample(seq(as.Date('2016-01-01'), as.Date(Sys.Date()), by = "day"), 1000)

sidebar <- dashboardSidebar(dateRangeInput(
  "dates", label = h4("Date range"), start = '2016-01-01', end = Sys.Date(),
  format = "dd-mm-yyyy", startview = "year", min = "2016-01-01", max = Sys.Date()
))

body <- dashboardBody(
  textOutput("selected_dates"),
  br(),
  fluidRow(
        infoBoxOutput("total", width = 12)
  ),
  fluidRow(
    box(width = 12, solidHeader = TRUE,
        title = "X1 over time",
        plotOutput(outputId = "x1_time")
    )
  ),
  fluidRow(
    box(width = 12, solidHeader = TRUE,
        title = "X2 over time",
        plotOutput(outputId = "x2_time")
    )
  )
)

ui <- dashboardPage(dashboardHeader(title = "Example"),
                    sidebar,
                    body
)

server <- function(input, output) {
  filtered <- reactive({
    filtered_data <- random_data %>%
        filter(date >= input$dates[1] & date <= input$dates[2])
    return(filtered_data)
  })

  output$selected_dates <- renderText({
    validate(
      need(input$dates[2] >= input$dates[1], "End date is earlier than start date"
      )
    )
  })


  output$total<- renderInfoBox({
    validate(
      need(input$dates[2] >= input$dates[1], "")
    )
    infoBox(title = "Sample size", 
            value = nrow(filtered()), 
            icon = icon("binoculars"), color = "light-blue")
  })

  output$x1_time <- renderPlot({
    validate(
      need(input$dates[2] >= input$dates[1], "")
    )
    x1_time_plot <- ggplot(filtered(), aes(x = date, y = X1)) + 
      geom_bar(stat = "identity") 
      theme_minimal()
    x1_time_plot
  }) 

  output$x2_time <- renderPlot({
    validate(
      need(input$dates[2] >= input$dates[1], "")
    )
    x2_time_plot <- ggplot(filtered(), aes(x = date, y = X2)) + 
      geom_bar(stat = "identity") 
    theme_minimal()
    x2_time_plot
  }) 

}

shinyApp(ui, server)
セガ

あなたは使用することができshinyjs、およびshow/をhide使用すると、表示または非表示にしたいか、あなたはクラスでdivの中ですべてのボックスを入れて、このクラスで表示/非表示を使用するか、直接クラスを割り当てることができるすべてのinputIdsに方法fluidRows両方の例で、validate + needはもう必要ありません。

この例では、個々の出力IDを表示/非表示にします。

library(shiny)
library(shinydashboard)
library(tidyverse)
library(shinyjs)

## DATA ##################
random_data <- data.frame(replicate(2, sample(0:10, 1000, rep=TRUE)))
set.seed(1984)
random_data$date <- sample(seq(as.Date('2016-01-01'), as.Date(Sys.Date()), by = "day"), 1000)

sidebar <- dashboardSidebar(dateRangeInput(
  "dates", label = h4("Date range"), start = '2016-01-01', end = Sys.Date(),
  format = "dd-mm-yyyy", startview = "year", min = "2016-01-01", max = Sys.Date()
))
##################

## UI ##################
body <- dashboardBody(
  useShinyjs(),
  textOutput("selected_dates"),
  br(),
  fluidRow(
    infoBoxOutput("total", width = 12)
  ),
  fluidRow(
    box(width = 12, solidHeader = TRUE,
        title = "X1 over time",
        plotOutput(outputId = "x1_time")
    )
  ),
  fluidRow(
    box(width = 12, solidHeader = TRUE,
        title = "X2 over time",
        plotOutput(outputId = "x2_time")
    )
  )
)

ui <- dashboardPage(dashboardHeader(title = "Example"),
                    sidebar,
                    body
)
##################


server <- function(input, output) {
  filtered <- reactive({
    filtered_data <- random_data %>%
      filter(date >= input$dates[1] & date <= input$dates[2])
    return(filtered_data)
  })

  observe({
    if (input$dates[2] < input$dates[1]) {
      shinyjs::hide("total")
      shinyjs::hide("x1_time")
      shinyjs::hide("x2_time")
    } else {
      shinyjs::show("total")
      shinyjs::show("x1_time")
      shinyjs::show("x2_time")
    }
  })

  output$total<- renderInfoBox({
    infoBox(title = "Sample size", 
            value = nrow(filtered()), 
            icon = icon("binoculars"), color = "light-blue")
  })

  output$x1_time <- renderPlot({
    x1_time_plot <- ggplot(filtered(), aes(x = date, y = X1)) + 
      geom_bar(stat = "identity") 
    theme_minimal()
    x1_time_plot
  }) 

  output$x2_time <- renderPlot({
    x2_time_plot <- ggplot(filtered(), aes(x = date, y = X2)) + 
      geom_bar(stat = "identity") 
    theme_minimal()
    x2_time_plot
  }) 

}

shinyApp(ui, server)

この例では、fluidRowsのクラスを使用しているため、ダッシュボードのメインページ全体が非表示になります。

## UI ##################
body <- dashboardBody(
  useShinyjs(),
  textOutput("selected_dates"),
  br(),
  fluidRow(class ="rowhide",
    infoBoxOutput("total", width = 12)
  ),
  fluidRow(class ="rowhide",
    box(width = 12, solidHeader = TRUE,
        title = "X1 over time",
        plotOutput(outputId = "x1_time")
    )
  ),
  fluidRow(class ="rowhide",
    box(width = 12, solidHeader = TRUE,
        title = "X2 over time",
        plotOutput(outputId = "x2_time")
    )
  )
)

ui <- dashboardPage(dashboardHeader(title = "Example"),
                    sidebar,
                    body
)
##################


server <- function(input, output) {
  filtered <- reactive({
    filtered_data <- random_data %>%
      filter(date >= input$dates[1] & date <= input$dates[2])
    return(filtered_data)
  })

  observe({
    if (input$dates[2] < input$dates[1]) {
      shinyjs::hide(selector = ".rowhide")
    } else {
      shinyjs::show(selector = ".rowhide")
    }
  })

  output$total<- renderInfoBox({
    infoBox(title = "Sample size", 
            value = nrow(filtered()), 
            icon = icon("binoculars"), color = "light-blue")
  })

  output$x1_time <- renderPlot({
    x1_time_plot <- ggplot(filtered(), aes(x = date, y = X1)) + 
      geom_bar(stat = "identity") 
    theme_minimal()
    x1_time_plot
  }) 

  output$x2_time <- renderPlot({
    x2_time_plot <- ggplot(filtered(), aes(x = date, y = X2)) + 
      geom_bar(stat = "identity") 
    theme_minimal()
    x2_time_plot
  }) 

}

shinyApp(ui, server)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

入力ボックスにデータが入力されている場合はクリアボタンを表示し、入力がフォーカスされておらず、入力ボックスにデータがない場合はクリアボタンを非表示にします

分類Dev

バーコードスキャナーは、ユーザーが入力ボックスを使用している場合にのみ「キープレス」イベントを生成します。ユーザーが入力ボックスを使用していないときに聞くイベントは何ですか?

分類Dev

入力が正しくない場合にメッセージボックスを表示するにはどうすればよいですか?

分類Dev

値にスペースがある場合は、非表示の値を適切に入力してください

分類Dev

入力タイプのチェックボックスに値checked = "checked"が含まれている場合、特定のdivを表示/非表示にします

分類Dev

シャイニーのボックスと入力をインラインで入力しますが、一部の入力のみ

分類Dev

ライブ検索ボックスの入力がデータベースと一致しない場合、データが見つからないことを表示するにはどうすればよいですか?

分類Dev

入力が非表示の場合でも、入力テキストの横にボタンを配置しますか?

分類Dev

PHP foreachはすべてのデータを一覧表示しますが、値がnullでない場合は入力を非表示にします

分類Dev

セクションヘッダーがUICollectionViewで非表示になっている場合は、空のスペースを削除します

分類Dev

入力とチェックボックスが空でない場合は、送信ボタンを有効にします

分類Dev

チェックボックスとドロップダウンメニューがまだ入力されていない場合、送信ボタンを無効にするにはどうすればよいですか?

分類Dev

C#アプリケーションに基本的な検証を追加して、間違ったユーザー名またはパスワードが入力された場合のメッセージボックスを表示するにはどうすればよいですか?

分類Dev

プロンプトボックスが空の場合、またはキャンセルがヒットした場合に成績が入力されていないかどうかをプログラムに検出させるために、このコードを編集するにはどうすればよいですか?

分類Dev

JQueryは入力ボックスを非表示にしますが、入力の値は非表示にします

分類Dev

データが含まれていない場合はテキストボックスを非表示にする

分類Dev

チェックボックスがチェックされていない場合は入力を非表示にする

分類Dev

チェックボックスがすでにチェックされてデータベースに保存されている場合はフィールドセットを非表示にし、チェックされていない場合はフィールドセットを表示します

分類Dev

入力がない場合はc_boxを非表示にします

分類Dev

連鎖選択は、入力できる場合にのみ2番目のボックスを表示します

分類Dev

入力した場所が本物ではない場合、地図はシャットダウンします

分類Dev

JavaScriptに無効なメールアドレスまたは空白を入力した場合、特定のテキストボックスの境界線を赤色で表示するにはどうすればよいですか?

分類Dev

入力テキストと一致しない場合はチェックボックスを非表示にする

分類Dev

systemdを使用してパスワードを1回入力するだけで、2つのLUKSデバイスにまたがるルートファイルシステムのロックを解除する適切な方法は何ですか?

分類Dev

phpで値が大きい場合、入力タイプは非表示になります。

分類Dev

フレックスボックスにテキスト入力フィールドが含まれている場合、フレックスボックスが広くなるのを防ぐにはどうすればよいですか?

分類Dev

jquery:チェックボックスがチェックされている場合は入力ボックスを非表示にする

分類Dev

入力またはdivが純粋なcssを使用してフォーカスされていない場合はdivを非表示にします

分類Dev

ボックスにコンテンツが入力されていないが、Angular jsを使用してカーソルがボックス内にある場合に、エラーの赤い色の入力ボックスを作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    入力ボックスにデータが入力されている場合はクリアボタンを表示し、入力がフォーカスされておらず、入力ボックスにデータがない場合はクリアボタンを非表示にします

  2. 2

    バーコードスキャナーは、ユーザーが入力ボックスを使用している場合にのみ「キープレス」イベントを生成します。ユーザーが入力ボックスを使用していないときに聞くイベントは何ですか?

  3. 3

    入力が正しくない場合にメッセージボックスを表示するにはどうすればよいですか?

  4. 4

    値にスペースがある場合は、非表示の値を適切に入力してください

  5. 5

    入力タイプのチェックボックスに値checked = "checked"が含まれている場合、特定のdivを表示/非表示にします

  6. 6

    シャイニーのボックスと入力をインラインで入力しますが、一部の入力のみ

  7. 7

    ライブ検索ボックスの入力がデータベースと一致しない場合、データが見つからないことを表示するにはどうすればよいですか?

  8. 8

    入力が非表示の場合でも、入力テキストの横にボタンを配置しますか?

  9. 9

    PHP foreachはすべてのデータを一覧表示しますが、値がnullでない場合は入力を非表示にします

  10. 10

    セクションヘッダーがUICollectionViewで非表示になっている場合は、空のスペースを削除します

  11. 11

    入力とチェックボックスが空でない場合は、送信ボタンを有効にします

  12. 12

    チェックボックスとドロップダウンメニューがまだ入力されていない場合、送信ボタンを無効にするにはどうすればよいですか?

  13. 13

    C#アプリケーションに基本的な検証を追加して、間違ったユーザー名またはパスワードが入力された場合のメッセージボックスを表示するにはどうすればよいですか?

  14. 14

    プロンプトボックスが空の場合、またはキャンセルがヒットした場合に成績が入力されていないかどうかをプログラムに検出させるために、このコードを編集するにはどうすればよいですか?

  15. 15

    JQueryは入力ボックスを非表示にしますが、入力の値は非表示にします

  16. 16

    データが含まれていない場合はテキストボックスを非表示にする

  17. 17

    チェックボックスがチェックされていない場合は入力を非表示にする

  18. 18

    チェックボックスがすでにチェックされてデータベースに保存されている場合はフィールドセットを非表示にし、チェックされていない場合はフィールドセットを表示します

  19. 19

    入力がない場合はc_boxを非表示にします

  20. 20

    連鎖選択は、入力できる場合にのみ2番目のボックスを表示します

  21. 21

    入力した場所が本物ではない場合、地図はシャットダウンします

  22. 22

    JavaScriptに無効なメールアドレスまたは空白を入力した場合、特定のテキストボックスの境界線を赤色で表示するにはどうすればよいですか?

  23. 23

    入力テキストと一致しない場合はチェックボックスを非表示にする

  24. 24

    systemdを使用してパスワードを1回入力するだけで、2つのLUKSデバイスにまたがるルートファイルシステムのロックを解除する適切な方法は何ですか?

  25. 25

    phpで値が大きい場合、入力タイプは非表示になります。

  26. 26

    フレックスボックスにテキスト入力フィールドが含まれている場合、フレックスボックスが広くなるのを防ぐにはどうすればよいですか?

  27. 27

    jquery:チェックボックスがチェックされている場合は入力ボックスを非表示にする

  28. 28

    入力またはdivが純粋なcssを使用してフォーカスされていない場合はdivを非表示にします

  29. 29

    ボックスにコンテンツが入力されていないが、Angular jsを使用してカーソルがボックス内にある場合に、エラーの赤い色の入力ボックスを作成するにはどうすればよいですか?

ホットタグ

アーカイブ