WedX - журнал о программировании и компьютерных науках

Невозможно отформатировать рассчитанные минимальные и максимальные значения ползунка, чтобы уменьшить десятичные разряды

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

ui <- fluidPage(
  headerPanel(title = "Test"),
  sidebarLayout(
    sidebarPanel(
      fileInput("NewData", "Upload File", multiple = FALSE, accept = ".xlsx") 

    ),
    
    mainPanel(
      
      tabsetPanel( type = "tabs", #Open panel
                   tabPanel("Distributions 1",plotOutput("hist1.plot")
                            ,uiOutput("updaterange")
                            )
                   
      ),
      tabsetPanel( type = "tabs", #Open panel
                   tabPanel("Distributions 2",plotOutput("hist2.plot")
                            #,uiOutput("update_mod_hist_range")
                            )
      )
      
    ) # close mainPanel
  ) # close sidebarLayout
) # close fluidPage


server <- function(input,output){ 
  
  ev = reactiveValues()
  
  
  observeEvent(input$NewData,{
    if(is.null(input$NewData))
      return(NULL)
    
    ev$sim.data <- read_excel(input$NewData$datapath)
    req(ev$sim.data)
    
    amount = c(sapply(ev$sim.data$amt,function(x){runif(1000,1,x)}))
    
    cat = (rep(ev$sim.data$cat, each = 1000))
    
    hist.data = data.frame(amount,cat)
    names(hist.data) = c("amount","cat")
    hist.data$cat = factor(hist.data$cat, levels = c("a","b","c"))
    
    low = mean(hist.data$amount)-sd(hist.data$amount)
    high = mean(hist.data$amount) + sd(hist.data$amount)
    
    ev$low = low
    ev$high = high
    ev$hist.data <- hist.data
    
    output$updaterange = renderUI({

      sliderInput("update_mod_hist_range","Update this Histogram",
                  min = min(ev$hist.data$amount),
                  max = max(ev$hist.data$amount),
                  value = c(ev$low,ev$high)
      )
    })
    
    
    pricedata = ddply(hist.data, c("cat"), plyr::summarize, avg = mean(amount), minus.stdev = mean(amount)-sd(amount),
                      plus.stdev = mean(amount) + sd(amount))
    pricedata = pricedata[order(pricedata$avg),]
    
    output$hist1.plot = renderPlot({
      
      ggplot(subset(hist.data, cat!="" ), 
             aes(x=amount, fill = cat))+
        geom_histogram(color="white", alpha = .8, position = 'identity', binwidth = 5)+
        theme_test()+
        geom_vline(aes(xintercept = avg), data = pricedata, color = "black", size = 1)+
        
        geom_vline(aes(xintercept = minus.stdev), data = pricedata, color = "black", size = .75, linetype = "dotted")+
        
        geom_vline(aes(xintercept = plus.stdev), data = pricedata, color = "black", size = .75, linetype = "dotted")+
        
        facet_grid(cat ~., scales = "free")+
        scale_y_continuous(expand = c(0,0),name = "Count")+
        scale_x_continuous(labels = scales::dollar, name="\nAmount", limits = c(0,100))
      
    }) #close renderPlot
    
  })

  observeEvent(input$update_mod_hist_range,{
    if(is.null(input$update_mod_hist_range)) return(NULL)
    
    mod.amount = runif(1000,input$update_mod_hist_range[1],input$update_mod_hist_range[2])
    
    #mod.amount = runif(1000,ev$low,ev$high)
    
    
    cat = rep("x",1000)
    mod.hist.data = data.frame(mod.amount,cat)
    names(mod.hist.data) = c("amount","cat")
    
    #mod.hist.data$cat = factor(mod.hist.data$cat, levels = c("a","b","c"))
    pricedata2 = ddply(mod.hist.data, c("cat"), plyr::summarize, avg = mean(amount), minus.stdev = mean(amount)-sd(amount),
                       plus.stdev = mean(amount) + sd(amount))
    pricedata2 = pricedata2[order(pricedata2$avg),]
    output$hist2.plot = renderPlot({ # open renderPlot
      
      ggplot(mod.hist.data, aes(x=amount))+
        geom_histogram(color="white", alpha = .8, position = 'identity', binwidth = 5)+
        theme_test()+
        geom_vline(aes(xintercept = avg), data = pricedata2, color = "black", size = 1)+
        
        geom_vline(aes(xintercept = minus.stdev), data = pricedata2, color = "black", size = .75, linetype = "dotted")+
        
        geom_vline(aes(xintercept = plus.stdev), data = pricedata2, color = "black", size = .75, linetype = "dotted")+
        
        #facet_grid(cat ~., scales = "free")+
        scale_y_continuous(expand = c(0,0),name = "Count")+
        scale_x_continuous(labels = scales::dollar, name="\nAmount", limits = c(0,100))
      
    }) #close renderPlot
  
  
})
 
     
} # close shinyServer

shinyApp(ui = ui, server = server)

Входной файл excel (не могу прикрепить файл):

a1 = amt
a2 = 50
a3 = 60
a4 = 70
b1 = cat
b2 = a
b3 = b
b4 = c

вы можете видеть на рисунке ниже, что минимальное и максимальное значения имеют много десятичных знаков в конце.

слайдер фото

29.07.2020

Ответы:


1

Это происходит из-за того, что вы устанавливаете ползунки min и max на значения с большим количеством цифр после запятой. Вы можете решить эту проблему, сначала округлив значения ползунков min и max, например:

sliderInput("update_mod_hist_range","Update this Histogram",
    min = floor(min(ev$hist.data$amount)),
    max = ceiling(max(ev$hist.data$amount)),
    value = c(ev$low,ev$high)
)

floor округляет числа в меньшую сторону, а ceiling округляет числа в большую сторону.

29.07.2020
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]