Вставьте числовой ввод для каждой строки - 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)
}
))