如何使用rhandsontable动态设置小数位数?

问题描述 投票:0回答:1

在下面的 MWE 代码中,我尝试让用户输入 (

deciInputs
) 设置 rhandsontable 表中呈现的小数位数。在起草代码时,奇怪的是,用户输入 0 会在表中呈现 1 个小数位,将用户输入设置为 1 会呈现 0 个小数位,并将用户输入设置为任何 > 1 的值(我们称此用户输入值为“ x") 导致渲染的小数位为 x - 1(其中,例如设置 x = 3 会导致渲染的小数位为 2)。尝试一下,你就会看到。此外,例如,如果用户输入设置为 1,我希望用户输入 12 直接到表本身(覆盖默认值)呈现为 12.0,用户输入 12.1 呈现为 12.1,用户输入 12.12 呈现为 12.1,用户输入 12.129 呈现为 12.1,等等,这也不太正确。我在下面的代码中做错了什么?

代码:

library(shiny)
library(rhandsontable)

ui <- fluidPage(
    sliderInput("deciInputs","Decimal places:",min = 0,max = 6,value = 2),
    rHandsontableOutput("data_table")
)

server <- function(input, output) {
  data <- reactive({
    df <- data.frame(data_set = c(3.14159, 2.71828, 1.61803))
  })
  
  output$data_table <- renderRHandsontable({
    df <- data()
    rh <- rhandsontable(df, readOnly = FALSE)
    for (col in 1:ncol(df)) {
        rh <- hot_col(rh, col, format = sprintf("0.%df", input$deciInputs))
        }
    return(rh)
  })
}

shinyApp(ui, server)
r shiny rhandsontable
1个回答
0
投票

尝试使用

format = format(0, nsmall = input$deciInputs)

library(shiny)
library(rhandsontable)

ui <- fluidPage(
  sliderInput("deciInputs","Decimal places:",min = 0,max = 6,value = 2),
  rHandsontableOutput("data_table")
)

server <- function(input, output) {
  data <- reactive({
    df <- data.frame(data_set = c(3.14159, 2.71828, 1.61803))
  })
  
  output$data_table <- renderRHandsontable({
    df <- data()
    rh <- rhandsontable(df, readOnly = FALSE)
    for (col in 1:ncol(df)) {
      rh <- hot_col(rh, col, format = format(0, nsmall = input$deciInputs))
    }
    return(rh)
  })
}

shinyApp(ui, server)
#> 
#> Listening on http://127.0.0.1:4368

创建于 2024-04-23,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.