【问题标题】:How do I stop renderTable from defaulting to 2 decimal places?如何阻止 renderTable 默认为小数点后 2 位?
【发布时间】:2019-09-11 14:03:42
【问题描述】:

我正在开发一个闪亮的应用程序,它响应一些用户输入并生成一个表格。我需要该表中的数据至少保留 3 位小数,但 renderTable 一直默认为 2。

我尝试过使用digits = 和round 函数,但没有任何改变输出。示例代码如下。

library(shiny)

x1 <- c("red", "orange", "yellow", "green", "blue", "indigo", "violet")

ui <- fluidPage(
  fluidPage(title = "Example Shiny"),
  sidebarLayout(
    sidebarPanel(
      numericInput("rank", "Rank 1 - 7", value = 3, min =1, max = 7),
      selectInput("color", "Color", x1), 
      numericInput("x2", "Another Variable (enter any number)", value = 0, min = 0, max = 500)
    ),
    mainPanel(
      tabsetPanel(type = "tabs",
                  tabPanel("Table", tableOutput("table"))
      )
    )
  )
)
server <- function(input, output, session) {
  color_table <- data.frame('red' = c(1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0,0,0,0,0,0), 
                             'orange' = c(0.1,0.2,0.3,0.4,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
                             "yellow" = c(10,20,30,40,50,60,70,80, 0, 0,0,0,0,0,0,0,0,0,0,0,0), 
                             "green" = c(0.1,0.2,0.3,0.4,0.5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),  
                             "blue" = c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,0), 
                             "indigo" = c(0.055,0.105,0.205,0.305,0.405,0.505,0.605,0.705,0.805,0.905,1.005,1.105,1.205,1.305,1.405,1.505,1.605,1.705,1.805,1.905,2.05), 
                             "violet" = c(0.055,0.105,0.155,0.205,0.250,0.300,0.350,0.400,0,0,0,0,0,0,0,0,0,0,0,0,0))
  rank <- reactive({
    get(input$rank, inherits = FALSE)
  })

  output$table <- renderTable({

    var1 = color_table[, input$color]

    var2 = if(input$color == "red" | input$color == "orange") {
      ((var1 * as.numeric(input$rank) * 60)/ as.numeric(input$x2))/1000
    } else {
      var1 *  as.numeric(input$rank) / as.numeric(input$x2)
    }
    data.frame(Var1 = var1, Var2 = var2)
  })
}

shinyApp(ui, server)

我希望 var2 列中的数字至少保留 3 位小数。

【问题讨论】:

  • 仅在 var2 列中?
  • 这是必要的,但在 var1 列中也可以有 3。您在下面的答案有效。我想我错过了前面的逗号。

标签: r shiny


【解决方案1】:

digits 参数有效。像这样使用:

  output$table <- renderTable({

    var1 = color_table[, input$color]

    var2 = if(input$color == "red" | input$color == "orange") {
      ((var1 * as.numeric(input$rank) * 60)/ as.numeric(input$x2))/1000
    } else {
      var1 *  as.numeric(input$rank) / as.numeric(input$x2)
    }
    data.frame(Var1 = var1, Var2 = var2)
  }, digits = 3)

【讨论】:

  • 这很好。 +1 但是?renderDataTable() 没有显示任何digits 参数,那么这如何工作以及如何在不反复试验的情况下解决这个问题?我正在研究这个答案并尝试了options = list(digits = 3),但没有成功。但至少options 是有据可查的论据。
  • @Shree 这是renderTable,而不是renderDataTable
  • 啊!我的错。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
相关资源
最近更新 更多