在下面的 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)
尝试使用
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