Вставьте числовой ввод для каждой строки - R Shiny

У меня есть сложный код, который генерирует большую матрицу, но здесь я прилагаю простой, воспроизводимый пример, чтобы четко объяснить, что я хочу: Вот код:

# 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)
 })

Моя цель - поместить слева и справа от таблицы небольшое текстовое поле, по одному для каждой строки таблицы. По моей идее, мне нужно иметь возможность написать число в левом текстовом поле, в конечном итоге также в правом текстовом поле, а затем выполнить некоторые вычисления в строке на основе числа, вставленного вручную. Конечно, длина таблицы будет меняться, поэтому мне нужно использовать что-то вроде dim(My_table), чтобы правильно разместить одно маленькое текстовое поле для каждой строки, одно слева и одно справа. Я подумал использовать функцию numericInput R блестящий, но я не могу понять, как применить в этом сценарии.

Могу ли я сделать это только с функциями R Shiny или я вынужден использовать HTML UI.R?

1 ответ

Решение

Вы можете связать свою матрицу с двумя векторами строк тегов HTML для числовых входов (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)

  }
))
Другие вопросы по тегам