Rシャイニー:データテーブルの行ボタンを削除

ダンカンエリス

私は、ユーザーがデータテーブルを制御できるRShinyアプリに取り組んでいます。テーブルに新しい行を追加したり、既存の行を削除したりできます。私の望みは、ユーザーがこのボタンをクリックできるテーブルに[削除]ボタンを埋め込んで、その行を削除することです。

以下は私のソリューションの現在のステータスですが、一貫して機能していません。追加ボタンは一貫して機能しますが、削除ボタンが認識されない場合があります。

失敗の例。

  • アプリをロード
  • 行2を削除します
    • 作品
  • 行1を削除します
    • 作品
  • 3を削除します
    • ボタンが押されたことを認識しません。

`` `

library(DT)

getRemoveButtons <- function(n, idS = "", lab = "Pit") {
  if (stringr::str_length(idS) > 0) idS <- paste0(idS, "-")
  ret <- shinyInput(actionButton, n,
                    'button_', label = "Remove",
                    onclick = sprintf('Shiny.onInputChange(\"%sremove_button_%s\",  this.id)' ,idS, lab))
  return (ret)
}
shinyInput <- function(FUN, len, id, ses, ...) {
  inputs <- character(len)
  for (i in seq_len(len)) {
    inputs[i] <- as.character(FUN(paste0(id, i), ...))
  }
  inputs
}

ui = shinyUI(fluidPage(
  fluidRow(DT::dataTableOutput("myTable")),
  fluidRow(actionButton("addRow", label = "Add Row",
                        icon = icon("plus"))))
)

server = function(input, output) {

  values <- reactiveValues()
  values$tab <- tibble(
    Row = 1:3L,
    Remove = getRemoveButtons(3, idS = "", lab = "Tab1"))

  proxyTable <- DT::dataTableProxy("tab")

  output$myTable <- DT::renderDataTable({
    DT::datatable(values$tab,
                  options = list(pageLength = 25,
                                 dom        = "rt"),
                  rownames = FALSE,
                  escape   = FALSE,
                  editable = TRUE)
  })

  observeEvent(input$remove_button_Tab1, {
    myTable <- values$tab
    s <- as.numeric(strsplit(input$remove_button_Tab1, "_")[[1]][2])
    myTable <- filter(myTable, row_number() != s)
    myTable <-
      mutate(myTable,
             Remove = getRemoveButtons(nrow(myTable), idS = "", lab = "Tab1"))
    replaceData(proxyTable, myTable, resetPaging = FALSE)
    values$tab <- myTable
  })
  observeEvent(input$addRow, {
    myTable <- isolate(values$tab)
    myTable <- select(myTable, Row)
    myTable <- bind_rows(
      myTable,
      tibble(Row = nrow(myTable) + 1))
    myTable <- mutate(myTable,
                      Remove = getRemoveButtons(nrow(myTable), idS = "", lab = "Tab1"))
    replaceData(proxyTable, myTable, resetPaging = FALSE)
    values$tab <- myTable
  })
}

shinyApp(ui = ui, server = server)
ダンカンエリス

わかりました、今は動作しています。問題は、ボタンのIDを再利用しようとしたことでした。カウンターを作成し、新しいボタンごとに、これまで使用されたことのないIDを割り当てることで、完全に機能するようになりました。以下の変更されたコード。

`` `

library(DT)
library(dplyr)

getRemoveButton <- function(n, idS = "", lab = "Pit") {
  if (stringr::str_length(idS) > 0) idS <- paste0(idS, "-")
  ret <- shinyInput(actionButton, n,
                    'button_', label = "Remove",
                    onclick = sprintf('Shiny.onInputChange(\"%sremove_button_%s\",  this.id)' ,idS, lab))
  return (ret)
}

shinyInput <- function(FUN, n, id, ses, ...) {
  as.character(FUN(paste0(id, n), ...))
}

ui = shinyUI(fluidPage(
  fluidRow(DT::dataTableOutput("myTable")),
  fluidRow(actionButton("addRow", label = "Add Row",
                        icon = icon("plus"))))
)

server = function(input, output) {

  buttonCounter <- 3L

  values <- reactiveValues()
  values$tab <- tibble(
    Row = 1:3L,
    id = 1:3L) %>%
    rowwise() %>%
    mutate(Remove = getRemoveButton(id, idS = "", lab = "Tab1"))

  proxyTable <- DT::dataTableProxy("tab")

  output$myTable <- DT::renderDataTable({
    DT::datatable(values$tab,
                  options = list(pageLength = 25,
                                 dom        = "rt"),
                  rownames = FALSE,
                  escape   = FALSE,
                  editable = TRUE)
  })

  observeEvent(input$remove_button_Tab1, {
    myTable <- values$tab
    s <- as.numeric(strsplit(input$remove_button_Tab1, "_")[[1]][2])
    myTable <- filter(myTable, id != s)
    replaceData(proxyTable, myTable, resetPaging = FALSE)
    values$tab <- myTable
  })
  observeEvent(input$addRow, {
    buttonCounter <<- buttonCounter + 1L
    myTable <- isolate(values$tab)
    myTable <- bind_rows(
      myTable,
      tibble(Row = nrow(myTable) + 1) %>%
        mutate(id = buttonCounter,
               Remove = getRemoveButton(buttonCounter, idS = "", lab = "Tab1")))
    replaceData(proxyTable, myTable, resetPaging = FALSE)
    values$tab <- myTable
  })
}

shinyApp(ui = ui, server = server)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Rシャイニー:データテーブルのアクションボタンを処理する

分類Dev

Rシャイニーのアクションボタンとのデータテーブルの競合にフォーマットを追加する

分類Dev

Rシャイニーのアクションボタンとのデータテーブルの競合にフォーマットを追加する

分類Dev

シャイニーアプリでDTデータテーブルの行を削除する

分類Dev

Rシャイニー-アクションボタンを押した後、関数の値をデータテーブルに保存します

分類Dev

Rシャイニーのデータテーブルから最初の列(インデックス)を削除する方法

分類Dev

Rシャイニー:データテーブル行のマウスホバーテキスト

分類Dev

Rシャイニー:チェックボックスでデータテーブルを更新

分類Dev

シャイニーのデータテーブルのアイコン

分類Dev

R、シャイニー、DTテーブル、データの置き換え

分類Dev

Rシャイニーアプリのデータテーブル表示にクエリを埋め込む

分類Dev

RシャイニーのDTデータテーブルを使用した列ヘッダーとしての2番目の行

分類Dev

「削除」ボタンでテーブルの行を削除する方法

分類Dev

シャイニーR:データテーブルからチェックボックス入力のリストを保存する方法は?

分類Dev

Rシャイニー:動的に作成されたタブにデータテーブルを追加する方法

分類Dev

データ内の観測インデックスを削除します。表R-シャイニーダッシュボード

分類Dev

シャイニーR整列ボタン

分類Dev

Rシャイニー-ラジオボタンのラベルを取得する

分類Dev

データをアップロードし、列名をラジオボタンに入れて、テーブルをシャイニーで表示します

分類Dev

Rシャイニー:テーブル内の特定の行の境界線を削除します

分類Dev

データリスト内のボタンをクリックしてセッションデータテーブル行を削除する方法

分類Dev

リアクティブデータフレーム用に作成されたRシャイニーアプリのマーカーを削除します

分類Dev

ボタンRシャイニーでNavBarタブを切り替える方法

分類Dev

Rシャイニー:タブ内のテーブルの動的な数

分類Dev

ボタンでテーブルからデータ行を削除する

分類Dev

Rシャイニーダッシュボードのリアクティブ関数でデータフレームを返す

分類Dev

テーブル内のボタンを使用してデータベースから行を削除する(PHP)

分類Dev

シャイニー:テーブルデータをダウンロードしてプロット

分類Dev

テーブル行削除ボタン

Related 関連記事

  1. 1

    Rシャイニー:データテーブルのアクションボタンを処理する

  2. 2

    Rシャイニーのアクションボタンとのデータテーブルの競合にフォーマットを追加する

  3. 3

    Rシャイニーのアクションボタンとのデータテーブルの競合にフォーマットを追加する

  4. 4

    シャイニーアプリでDTデータテーブルの行を削除する

  5. 5

    Rシャイニー-アクションボタンを押した後、関数の値をデータテーブルに保存します

  6. 6

    Rシャイニーのデータテーブルから最初の列(インデックス)を削除する方法

  7. 7

    Rシャイニー:データテーブル行のマウスホバーテキスト

  8. 8

    Rシャイニー:チェックボックスでデータテーブルを更新

  9. 9

    シャイニーのデータテーブルのアイコン

  10. 10

    R、シャイニー、DTテーブル、データの置き換え

  11. 11

    Rシャイニーアプリのデータテーブル表示にクエリを埋め込む

  12. 12

    RシャイニーのDTデータテーブルを使用した列ヘッダーとしての2番目の行

  13. 13

    「削除」ボタンでテーブルの行を削除する方法

  14. 14

    シャイニーR:データテーブルからチェックボックス入力のリストを保存する方法は?

  15. 15

    Rシャイニー:動的に作成されたタブにデータテーブルを追加する方法

  16. 16

    データ内の観測インデックスを削除します。表R-シャイニーダッシュボード

  17. 17

    シャイニーR整列ボタン

  18. 18

    Rシャイニー-ラジオボタンのラベルを取得する

  19. 19

    データをアップロードし、列名をラジオボタンに入れて、テーブルをシャイニーで表示します

  20. 20

    Rシャイニー:テーブル内の特定の行の境界線を削除します

  21. 21

    データリスト内のボタンをクリックしてセッションデータテーブル行を削除する方法

  22. 22

    リアクティブデータフレーム用に作成されたRシャイニーアプリのマーカーを削除します

  23. 23

    ボタンRシャイニーでNavBarタブを切り替える方法

  24. 24

    Rシャイニー:タブ内のテーブルの動的な数

  25. 25

    ボタンでテーブルからデータ行を削除する

  26. 26

    Rシャイニーダッシュボードのリアクティブ関数でデータフレームを返す

  27. 27

    テーブル内のボタンを使用してデータベースから行を削除する(PHP)

  28. 28

    シャイニー:テーブルデータをダウンロードしてプロット

  29. 29

    テーブル行削除ボタン

ホットタグ

アーカイブ