2

私は大きな行列を生成する複雑なコードを持っていますが、ここで私が望むものを明確に説明するために、単純で再現可能な例を添付します: コードは次のとおりです:

# ui.R

library(shiny)
shinyUI(
  mainPanel("Table Output",
           (tableOutput("My_table")))
        )   

# server.R

library(shiny)
 shinyServer(function(input, output, session) {
  My_table = matrix( 
   c(1:100), 
     nrow=20, 
     ncol=5)
  output$My_table <- renderTable(My_table)
 })

私の目標は、テーブルの左右に、テーブルの各行に 1 つずつ、小さなテキスト ボックスを配置することです。私の考えでは、左側のテキストボックス内に数値を書き込み、最終的には右側のテキストボックスにも数値を書き込んでから、手動で挿入された数値に基づいて行で計算を行う必要があります。もちろん、テーブルの長さはさまざまなので、dim(My_table)のようなものを使用して、行ごとに 1 つの小さなテキスト ボックスを適切に配置する必要があります。1 つは左側に、もう 1 つは右側に配置します。RshinyのnumericInput関数を使用することを考えましたが、このシナリオでどのように適用するかについての手がかりが得られません。

R Shiny 関数でのみこれを行うことができますか、それとも html ui.R を使用する必要がありますか?

4

1 に答える 1

2

マトリックスを数値入力用の HTML タグの文字列の 2 つのベクトル (以下のコードでは input1 と input2) にバインドし、 を追加しsanitize.text.functionて HTML タグをそのまま (文字列としてではなく) 評価することができます。

例えば ​​:

shiny::runApp(list(
  ui = basicPage(
    tableOutput("My_table")
  ),
  server = function(input, output, session) {

    My_table = matrix( 
      c(1:100), 
      nrow=20, 
      ncol=5)

    output$My_table <- renderTable({
      input1 <- paste0("<input id='a", 1:nrow(My_table), "' class='shiny-bound-input' type='number' style='width: 50px;'>")
      input2 <- paste0("<input id='b", 1:nrow(My_table), "' class='shiny-bound-input' type='number' style='width: 50px;'>")
      cbind(input1, My_table, input2)
    }, sanitize.text.function = function(x) x)

  }
))
于 2014-03-06T11:11:09.687 に答える