无法格式化计算的滑块最小值和最大值以减少小数位
Unable to format calculated slider min and max values to reduce decimal places
我找不到任何关于如何从动态数据格式化滑块值的文档。我试图将“dollar”和“dollar_format”包裹在滑块范围值周围,但它让我大吃一惊。
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
您可以在下图中看到最小值和最大值有很多尾随小数。
发生这种情况是因为您将滑块的最小值和最大值设置为小数点后有很多数字的值。您可以通过首先舍入滑块最小值和最大值的值来解决此问题,例如:
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
向上舍入。
我找不到任何关于如何从动态数据格式化滑块值的文档。我试图将“dollar”和“dollar_format”包裹在滑块范围值周围,但它让我大吃一惊。
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
您可以在下图中看到最小值和最大值有很多尾随小数。
发生这种情况是因为您将滑块的最小值和最大值设置为小数点后有很多数字的值。您可以通过首先舍入滑块最小值和最大值的值来解决此问题,例如:
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
向上舍入。