sprintf работает локально, но не работает на сервере shinyapps.io - PullRequest
0 голосов
/ 22 января 2019

У меня блестящее приложение, которое преобразует цифры с помощью sprintf

. Первоначально это было частью более крупного приложения, но для устранения неполадок я сократил его до функциональности, которая вызывает проблемы.Я также указал, какие пакеты должна использовать функция, в случае возникновения конфликтов пакетов / масок и т. Д.

Он запускается локально, но когда я загружаю его на сервер Shiny Apps, он ломается.

```
library(base)
library(shiny)

#Function to covert between sss.ss and mm:ss.ss format
mmss_format <- function(x, ...) {
  sec <- x%%60
  min <- x%/%60
  sec <- base::sprintf("%05.2#f", sec)
  ifelse(min == 0, base::paste(sec), 
         base::paste(min, sec, sep = ":"))
}

# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
    titlePanel("Test app"),


      # Show input and output
   mainPanel(textInput(inputId = "TestIn1",
                       label = "To:",
                       value = "100.45",
                       width = "100px"),              
             br(),
             textOutput(outputId = "TestOut1")
   ))

# Define server 
server <- function(input, output) {

  output$TestOut1 <- reactive({mmss_format(as.numeric(input$TestIn1))
  })
}

# Run the application 
 shinyApp(ui = ui, server = server)
```

При локальном запуске, когда я ввожу число (например, приведенный выше пример 100.45), функция mmss_function возвращает 1: 40.45 в виде строки символов (что означает одну минуту, 40,45 секунды).Это то, что я хочу.

Запуск на сервере shinyapps, хотя я получаю 1:% 05.2 # f.Это моя проблема.https://gpilgrim.shinyapps.io/testapp2/

Это говорит мне, что что-то не так с функцией sprintf, где вместо того, чтобы интерпретировать "% 05.2 # f" согласно документации sprintf, она просто печатает эту строку.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Ух ты, какая у тебя версия R? Это работает для меня на R 3.4, но не R 3.2 или 3.5.

# R 3.4.3
R.version.string
## [1] "R version 3.4.3 (2017-11-30)"
sprintf("%05.2#f", 123)
## [1] "123.00"

# R 3.2.3
R.version.string
## [1] "R version 3.2.3 (2015-12-10)"
sprintf("%05.2#f", 123)
## [1] "%05.2#f"

# R 3.5.0
R.version.string
## [1] "R version 3.5.0 (2018-04-23)"
sprintf("%05.2#f", 123)
## [1] "%05.2#f"

Я просмотрел https://cran.r -project.org / doc / manual / r-release / NEWS.html , но не увидел ничего связанного.

Я полагаю, что проблема связана с расположением хеша. Попробуйте разместить его сразу после %, например:

sprintf("%#05.0f", 123)
## [1] "0123."

Или исключить его, поскольку он добавляет десятичную дробь, но вы уже указали 2 десятичных знака с .2f.

0 голосов
/ 23 января 2019

Я написал другую функцию, которая делает то же самое, но использует формат вместо sprintf.Он работает на сервере, но мне все еще любопытно, почему sprintf этого не делает.

mmss_formatF <- function(x, ...) {
sec <- x%%60
min <- x%/%60
sec <- format(sec,trim = FALSE, nsmall = 2)
ifelse(min == 0, base::paste(sec),
base::paste(min, sec, sep = ":"))
}

Приложение обновлено и отображает оба вывода: https://gpilgrim.shinyapps.io/testapp2/

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