我有一个包含许多numericInput
字段的Shiny应用程序。我想要一种格式化numericInput
字段的方式,并用逗号分隔每10 ^ 3。例如,我要5,000,000而不是5000000。
我可以使用format
和prettyNum
函数在R中执行此操作。但是我没有办法在Shiny中做到这一点。
这对UI很有帮助,因为它可以与百分比,金钱等一起使用。有人知道如何将其合并到numericInput
字段中吗?
谢谢!
library(shiny)
# Define UI for application that draws a histogram
ui <- fluidPage(
mainPanel(
numericInput("formatNumber",
"Number should be formatted, e.g."5,000,000",
value = 1000),
p(format(5000000.10, big.mark=",", big.interval=3L,
digits=0, scientific=F))
)
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
我找不到任何可以帮助numericInput()
的东西,但是这里是textInput()
可以使用的方法。
library(shiny)
if(interactive()){
shinyApp(
ui <- fluidPage(
mainPanel(
textInput("formatNumber1", "Number should be formatted, e.g.5,000,000", value = 1000),
textInput("formatNumber2", "Number should be formatted, e.g.5,000,000", value = 1000)
)
),
server <- function(input, output, session) {
observe({
updateTextInput(session, "formatNumber1", "Number should be formatted, e.g.5,000,000",
value = prettyNum(input$formatNumber1, big.mark=",", scientific=FALSE))
updateTextInput(session, "formatNumber2", "Number should be formatted, e.g.5,000,000",
value = prettyNum(input$formatNumber2, big.mark=",", scientific=FALSE))
})
}
)
}
答案 1 :(得分:1)
shinyWidgets
软件包具有一个很棒的新功能(自0.5.4版本起添加,也是免责声明,我通过拉取请求将其添加),autonumericInput将使您能够做到这一点。它基于javascript库自动数字。该功能有很多选项,但是文档内容丰富,对于简单用途,大多数可以忽略。
您要尝试执行的操作可以完成以下操作:
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
h1("Autonumeric Input Example"),
shinyWidgets::autonumericInput(
inputId = "num",
label = "Enter a large number:",
value = 1000000,
currencySymbolPlacement = "p",
decimalPlaces = 2,
digitGroupSeparator = ",",
decimalCharacter = "."
),
verbatimTextOutput("res1")
)
server <- function(input, output) {
output$res1 <- renderText(input$num)
}
shinyApp(ui = ui, server = server)
这特别好,因为它提供了按需输入格式,以便用户可以轻松地知道输入的数字有多大。我从经验中知道,尝试将数字放大是很痛苦的将数字放入基础闪亮的numericInput中,尝试在一个小方框中对数字进行计数,然后找出有多少个零。此功能的目的是使格式化数字输入变得更加容易。
希望这很有用!
答案 2 :(得分:0)
这是我发现的唯一方法,但是,如果您太慢或在添加逗号后添加数字,则该数字将无法正确显示(例如,如果您在数字上添加0,则3,000变为3,0,000。字符串的结尾)。为了解决这个问题,我更改了updateTextInput()函数,如下所示:
updateTextInput(
session,
"formatNumber1",
"Number should be formatted, e.g.5,000,000",
value = prettyNum(
gsub(",", "", input$formatNumber1),
big.mark=",", scientific=FALSE
)
)
实际上,每次修改输入时,都会使用gsub()函数将输入重置为数字,否则prettyNum()函数仅使用逗号后的数字,而忽略最后一个逗号左侧的所有数字。
如果您有多个输入要重新格式化,请按如下所示创建函数(注意:我还添加了req(input[[x]])
,以避免在空白输入时出现NA
)
updatetoprettynb <- function(x) {
req(input[[x]])
updateTextInput(
session,
x,
value = prettyNum(
gsub(",", "", input[[x]]),
big.mark = ",",
scientific = FALSE
)
)
}
您仍然必须以类似的方式使用该函数,但不要忘记使用“”:
observe({
updatetoprettynb("formatNumber1")
})