下面的Rshiny 代码使用包rhandsontable
,通过函数row_decimals()
保持完全的小数精度.作为下一步,我将try 将这些值显示为百分比,同时保持完全的小数精度.我使用format()
或定制的JavaScript呈现器try 的所有内容要么舍入,要么截断呈现值,这是我不想要的.理想情况下,任何小于或等于两个小数位的值都显示为两个小数(例如,0.20、0.212、0.2123分别显示为20.00%、21.20%和21.23%),任何大于两个小数位的值都显示为小数(例如,0.123456789显示为12.3456789%).对于如何做到这一点,有什么建议吗?如下图所示.
代码:
library(shiny)
library(rhandsontable)
# Calculates decimal places for each value in specified column
row_decimals <- function(df, col_name) {
col <- df[[col_name]]
n_digits <- sapply(col, function(x) {
nchar(gsub(".*\\.|^[^.]+$", "", as.character(x)))
})
return(n_digits)
}
ui <- fluidPage(
br(),
rHandsontableOutput("myTable"),
br(),
textOutput("productOutput")
)
server <- function(input, output) {
values <- reactiveValues(data = data.frame(Values = c(0.5, 0.123456789)))
observeEvent(input$myTable, {values$data <- hot_to_r(input$myTable)})
output$myTable <- renderRHandsontable({
data <- values$data
decimals <- row_decimals(data, 'Values')
data$Values <- mapply(function(x,d){format(x, nsmall = d)},data$Values,decimals)
rhandsontable(data)
})
output$productOutput <- renderText({
product <- as.numeric(values$data$Values[1]) * as.numeric(values$data$Values[2])
paste("Product of the two rows: ", product)
})
}
shinyApp(ui = ui, server = server)