0

DTデータテーブルのいくつかの列に多数のnumericInputを入れています。ユーザーがボタンをクリックできるようにしたいと思います。これにより、最初の列から他の列に入力がコピーされます。データテーブルの一部ではないnumericInputに対してこれを機能させることができますが、データテーブル内のnumericInputには何も起こりません。私の問題の簡単な例を以下に示します。また、私が探している動作を示すために、データテーブルの一部ではないスタンドアロンの numericInput の実際の例も含めます。

library(shiny)
library(DT)

shinyApp(
  server = shinyServer(function(input, output, session) {

    output$Table <- DT::renderDataTable({

      observeEvent(input$button1, { 
        v <- input$Number.1.1
        updateNumericInput(session,"Number.2.1", value = v)
      })


      temp <- data.frame(c(1:5))
      temp$Numbers.1 <- ""
      temp$Numbers.2 <- ""

      sapply(1:5, FUN = function(i){
        temp$Numbers.1[i] <<- as.character(numericInput(paste0("Number.1.", i), "", value = NULL, min = 0, max = 10, step = 0.01))
      })

      sapply(1:5, FUN = function(i){
        temp$Numbers.2[i] <<- as.character(numericInput(paste0("Number.2.", i), "", value = NULL, min = 0, max = 10, step = 0.01))
      })

      datatable(temp,escape = FALSE, rownames = FALSE, options = list(sort = FALSE, paging = FALSE, searching = FALSE))

  })

  observeEvent(input$button2,{
    v <- input$Number.3
    updateNumericInput(session,"Number.4", value = v)
  })  
}),

  ui = fluidPage(
    br(),
    actionButton("button1","Copy"),
    dataTableOutput("Table"),
    br(),
    actionButton("button2","Copy"),
    numericInput("Number.3", "Number 3", value = NULL, min = 0, max = 10, step = 0.1),
    numericInput("Number.4", "Number 4", value = NULL, min = 0, max = 10, step = 0.1)
  )
)

また、observeEvent を renderDataTable の外に配置しようとしましたが、それは役に立ちませんでした。ボタンはスタンドアロンの数値入力に対しては正常に機能するため、これはある種のスコーピングの問題であると推測していますが、解決方法がわかりません。

助けてくれてありがとう!

4

1 に答える 1

0

問題を解決しました。(私は実際には答えを知っていましたが、頭がおならをしていたことがわかりました。) renderDataTable({}) 内の datatable() 関数は、次のようになります。

datatable(temp,escape = FALSE, rownames = FALSE, options = list(sort = FALSE, paging = FALSE, searching = FALSE,
                                                                      preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
                                                                      drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')))
于 2015-09-04T15:54:49.660 に答える