如何从R闪亮的动态矩阵中提取输入

时间:2018-03-27 00:27:10

标签: html r shiny

这与old question有关在动态尺寸的闪亮应用中创建矩阵式输入有关。我的目标是建立一个数字输入矩阵(其大小由其他用户输入确定),然后将该矩阵传递给其他R命令并从这些计算中打印一些输出。我有成功执行所有操作的代码,只是我只能将用户输入作为字符访问。

这是一个设置输入的示例,只是从矩阵打印几个单元格(这样可以正常工作,但不是我需要的):

shiny::runApp(list(
  ui = pageWithSidebar(
    headerPanel("test"),
    sidebarPanel(
      numericInput(inputId = "nrow",
                   label = "number of rows",
                   min = 1,
                   max = 20,
                   value = 1),
      numericInput(inputId = "ncol",
                   label = "number of columns",
                   min = 1,
                   max = 20,
                   value = 1)
    ),
    mainPanel(
      tableOutput("value"),
      uiOutput("textoutput"))
  ),   

  server = function(input,output){
    isolate({
      output$value <-renderTable({
        num.inputs.col1 <- paste0("<input id='r", 1:input$nrow, "c", 1, "' class='shiny-bound-input' type='number' value='1'>")
        df <- data.frame(num.inputs.col1)
        if (input$ncol >= 2){
          for (i in 2:input$ncol){
            num.inputs.coli <- paste0("<input id='r", 1:input$nrow, "c", i, "' class='shiny-bound-input' type='number' value='1'>")
            df <- cbind(df,num.inputs.coli)
          }
        }

        colnames(df) <- paste0("time ",as.numeric(1:input$ncol))
        df
      }, sanitize.text.function = function(x) x)
    })
    output$textoutput <- renderUI(paste0("Cells [1,1] and [2,2]: ",input$r1c1,",",input$r2c2))
  }
))

但是,当我尝试对矩阵中的输入执行任何操作时,例如output$textoutput <- renderUI(as.numeric(paste0(input$r1c1))+as.numeric(paste0(input$r2c2))),我会得到像$ operator is invalid for atomic vectors这样的经典R错误。我尝试了许多“as.numeric&#39;,&#39; as.character&#39;等等的组合。试图让它变成正确的格式。当我检查那些输入单元格的结构时,我发现它们有一个额外的“空”&#39;我似乎无法摆脱的属性,但我不确定这是否是问题的根源。

简而言之,如何从该矩阵中提取普通数字?或者有更好的方法来闪亮吗?我所知道的唯一其他解决方案是rhandsontable包,如果有合理的替代方案,我宁愿不使用。

任何建议都将非常感谢。谢谢!

修改/解决方案:将renderUIuiOutput替换为renderPrintverbatimTextOutput解决问题。感谢您的评论,blondeclover!

0 个答案:

没有答案