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

我的目标是在表格的左右两侧放一个小文本框,表格的每一行一个。在我的想法中,我需要能够在左侧文本框中写入一个数字,最终也在右侧文本框中写入一个数字,然后根据手动插入的数字对行进行一些计算。当然,表格的长度会有所不同,因此我需要使用类似dim(My_table)的东西,以便为每一行正确放置一个小文本框,一个在左侧,一个在右侧。我想使用 R shiny 的numericInput函数,但我不知道如何在这种情况下应用。

我可以仅使用 R Shiny 函数执行此操作,还是被迫使用 html ui.R ?

4

1 回答 1

2

您可以将矩阵与数字输入的 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)

  }
))
于 2014-03-06T11:11:09.687 回答