Как изменить форматирование чисел на индийскую систему счисления в R Shiny? - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь создать приборную панель в R с помощью Shiny, в одном из выходов окна значений у меня отображается число. Я хочу изменить форматирование согласно индийской системе счисления. В выводе окна значений в настоящее время отображается число 123,456,789, и я хочу представить его следующим образом: 12,34,56,789.

Пожалуйста, дайте мне знать, если потребуется дополнительная информация, любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 27 мая 2020

Вот быстрый совет, который позволяет в дальнейшем использовать format для большинства других функций. Единственное вмешательство, которое он выполняет, - это проверка наличия значащих цифр, требующих

format2 <- function(x, ..., big.mark = "", big.interval = c(3L, 2L), decimal.mark = ".") {
  intervene <- (log(abs(x), 10) >= sum(big.interval)) && nzchar(big.mark)
  cl <- match.call()
  cl[[1]] <- substitute(format)
  if (intervene) {
    cl$x <- x %/% 10^big.interval[1]
    cl$big.interval <- big.interval[2]
    bigx <- eval.parent(cl)
    cl$x <- x 
    cl$big.interval <- big.interval[1]
    mostx <- eval.parent(cl)
    mostx <- 
      substr(mostx,
             1L + nchar(x %/% 10^big.interval[1]) +
               trunc(trunc(log(abs(x %/% 10^big.interval[1]), 10L)) / big.interval[1]),
             nchar(mostx))
    return( paste0(bigx, mostx) )
  } else eval.parent(cl)
}

format2(123456789)
# [1] "123456789"
format2(12345, big.mark = ",") # no intervene necessary
# [1] "12,345"
format2(123456789, big.mark = ",")
# [1] "12,34,56,789"
format2(1e6 + pi, big.mark = ",")
# [1] "10,00,003"
format2(1e6 + pi, big.mark = ",", digits = 22)
# [1] "10,00,003.1415926536"
format2(1e6 + pi, big.mark = ",", digits = 22, small.mark = ",")
# [1] "10,00,003.14159,26536"

. Заявление об ограничении ответственности: я определенно не проверял это тщательно, поэтому вполне возможно, что угловые случаи могут быть не покрыты. Caveat emptor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...