#r #shiny
#r #блестящий
Вопрос:
Приложение ниже работает нормально. Я обычно генерирую графики, но я хотел бы округлить значения до graph1. В нынешнем виде они не округляются. Например, если я выберу 27/06, категория ABC, появится значение 6,5, но я хотел бы показать значение округлением. Запоминание: я хочу округленные значения только для графа 1. Поэтому, не могли бы вы помочь мне решить эту проблему?
Исполняемый код ниже:
library(shiny) library(shinythemes) library(dplyr) library(tidyverse) library(lubridate) library(shinyWidgets) function.testlt;-function(){ df1 lt;- structure( list(date1= c("2021-06-26","2021-06-26","2021-06-26","2021-06-26"), date2 = c("2021-06-27","2021-07-01","2021-07-02","2021-07-03"), Category = c("ABC","ABC","ABC","ABC"), Week= c("Saturday","Wednesday","Thurday","Saturday"), DR1 = c(5,4,1,1), DR01 = c(8,4,1,0), DR02= c(7,4,2,0),DR03= c(6,9,5,0), DR04 = c(5,5,4,0),DR05 = c(5,5,4,0),DR06 = c(7,5,4,0),DR07 = c(2,5,4,0),DR08 = c(2,5,4,0)), class = "data.frame", row.names = c(NA, -4L)) return(df1) } f1 lt;- function(df1, dmda, CategoryChosse, plot = FALSE, var1, var2, gnum=0, graf=1) { xlt;-df1 %gt;% select(starts_with("DR0")) xlt;-cbind(df1, setNames(df1$DR1 - x, paste0(names(x), "_PV"))) PVlt;-select(x, date2,Week, Category, DR1, ends_with("PV")) medlt;-PV %gt;% group_by(Category,Week) %gt;% dplyr::summarize(dplyr::across(ends_with("PV"), median)) SPVlt;-df1%gt;% inner_join(med, by = c('Category', 'Week')) %gt;% mutate(across(matches("^DR0\d $"), ~.x get(paste0(cur_column(), '_PV')), .names = '{col}_{col}_PV')) %gt;% select(date1:Category, DR01_DR01_PV:last_col()) SPVlt;-data.frame(SPV) mat1 lt;- df1 %gt;% dplyr::filter(date2 == dmda, Category == CategoryChosse) %gt;% select(starts_with("DR0")) %gt;% pivot_longer(cols = everything()) %gt;% arrange(desc(row_number())) %gt;% mutate(cs = cumsum(value)) %gt;% dplyr::filter(cs == 0) %gt;% pull(name) (dropnames lt;- paste0(mat1,"_",mat1, "_PV")) SPV lt;- SPV %gt;% filter(date2 == dmda, Category == CategoryChosse) %gt;% select(-any_of(dropnames)) if(length(grep("DR0", names(SPV))) == 0) { SPV[head(mat1,10)] lt;- NA_real_ } datas lt;-SPV %gt;% dplyr::filter(date2 == ymd(dmda)) %gt;% group_by(Category) %gt;% dplyr::summarize(dplyr::across(starts_with("DR0"), sum)) %gt;% pivot_longer(cols= -Category, names_pattern = "DR0(. )", values_to = "val") %gt;% mutate(name = readr::parse_number(name)) colnames(datas)[-1]lt;-c(var1,var2) datas$days lt;- datas[[as.name(var1)]] datas$numbers lt;- datas[[as.name(var2)]] datas lt;- datas %gt;% group_by(Category) %gt;% slice((as.Date(dmda) - min(as.Date(df1$date1) [ df1$Category == first(Category)])):max(days) 1) %gt;% ungroup mlt;-df1 %gt;% group_by(Category,Week) %gt;% dplyr::summarize(dplyr::across(starts_with("DR1"), mean)) mlt;-subset(m, Week == df1$Week[match(ymd(dmda), ymd(df1$date2))] amp; Category == CategoryChosse)$DR1 if (nrow(datas)lt;=2){ vallt;-as.numeric(m) } else{ mod lt;- nls(numbers ~ b1*days^2 b2,start = list(b1 = 0,b2 = 0),data = datas, algorithm = "port") coeflt;-coef(mod)[2] vallt;-as.numeric(coef(mod)[2]) } if(plot){ maxrange lt;- range(0, datas$numbers, na.rm = TRUE) maxrange[2] lt;- maxrange[2] 10 if (gnum) maxrange[2] lt;- maxrange[2] 40 maxlt;-max(0, datas$days, na.rm = TRUE) 1 limx = c(0,max) limy = c(0,maxrange[2]) if (graf==1){ if (nrow(datas)lt;=2) leg = round(m,1) else leg = round(coef,1) titl = "The number is:" }else if (graf==2){ if (nrow(datas)lt;=2) leg = paste('US
Ответ №1:
Мы можем создать новые функции, называемые round_0 и round_1.
round_0 lt;- partial(round, digits = 0) round_1 lt;- partial(round, digits = 1)
затем выберите один из них и передайте его в качестве аргумента fr
f1()
.
f1 lt;- function(df1, dmda, CategoryChosse, plot = FALSE, var1, var2, gnum=0, graf=1, fr) { xlt;-df1 %gt;% select(starts_with("DR0")) xlt;-cbind(df1, setNames(df1$DR1 - x, paste0(names(x), "_PV"))) PVlt;-select(x, date2,Week, Category, DR1, ends_with("PV")) medlt;-PV %gt;% group_by(Category,Week) %gt;% dplyr::summarize(dplyr::across(ends_with("PV"), median)) SPVlt;-df1%gt;% inner_join(med, by = c('Category', 'Week')) %gt;% mutate(across(matches("^DR0\d $"), ~.x get(paste0(cur_column(), '_PV')), .names = '{col}_{col}_PV')) %gt;% select(date1:Category, DR01_DR01_PV:last_col()) SPVlt;-data.frame(SPV) mat1 lt;- df1 %gt;% dplyr::filter(date2 == dmda, Category == CategoryChosse) %gt;% select(starts_with("DR0")) %gt;% pivot_longer(cols = everything()) %gt;% arrange(desc(row_number())) %gt;% mutate(cs = cumsum(value)) %gt;% dplyr::filter(cs == 0) %gt;% pull(name) (dropnames lt;- paste0(mat1,"_",mat1, "_PV")) SPV lt;- SPV %gt;% filter(date2 == dmda, Category == CategoryChosse) %gt;% select(-any_of(dropnames)) if(length(grep("DR0", names(SPV))) == 0) { SPV[head(mat1,10)] lt;- NA_real_ } datas lt;-SPV %gt;% dplyr::filter(date2 == ymd(dmda)) %gt;% group_by(Category) %gt;% dplyr::summarize(dplyr::across(starts_with("DR0"), sum)) %gt;% pivot_longer(cols= -Category, names_pattern = "DR0(. )", values_to = "val") %gt;% mutate(name = readr::parse_number(name)) colnames(datas)[-1]lt;-c(var1,var2) datas$days lt;- datas[[as.name(var1)]] datas$numbers lt;- datas[[as.name(var2)]] datas lt;- datas %gt;% group_by(Category) %gt;% slice((as.Date(dmda) - min(as.Date(df1$date1) [ df1$Category == first(Category)])):max(days) 1) %gt;% ungroup mlt;-df1 %gt;% group_by(Category,Week) %gt;% dplyr::summarize(dplyr::across(starts_with("DR1"), mean)) mlt;-subset(m, Week == df1$Week[match(ymd(dmda), ymd(df1$date2))] amp; Category == CategoryChosse)$DR1 if (nrow(datas)lt;=2){ vallt;-as.numeric(m) } else{ mod lt;- nls(numbers ~ b1*days^2 b2,start = list(b1 = 0,b2 = 0),data = datas, algorithm = "port") coeflt;-coef(mod)[2] vallt;-as.numeric(coef(mod)[2]) } if(plot){ maxrange lt;- range(0, datas$numbers, na.rm = TRUE) maxrange[2] lt;- maxrange[2] 10 if (gnum) maxrange[2] lt;- maxrange[2] 40 maxlt;-max(0, datas$days, na.rm = TRUE) 1 limx = c(0,max) limy = c(0,maxrange[2]) if (graf==1){ if (nrow(datas)lt;=2) leg = fr(m) else leg = fr(coef) titl = "The number is:" }else if (graf==2){ if (nrow(datas)lt;=2) leg = paste('US
Наконец, внутри сервера измените вывод$graph*.
output$graph lt;- renderPlot({ req(input$date2,input$code) var1 = "Days" var2 = "Numbers" f1(data(),as.character(input$date2),as.character(input$code),var1,var2,plot=TRUE, graf=1, fr = round_0) }) output$graph2 lt;- renderPlot({ req(input$date2,input$code) var1 = "Reserv" var2 = "Weekdays" f1(data(),as.character(input$date2),as.character(input$code),var1,var2,1,plot=TRUE, graf=2, fr = round_1) })
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
, round(m,1)) else leg = paste('US
Ответ №1:
Мы можем создать новые функции, называемые round_0 и round_1.
затем выберите один из них и передайте его в качестве аргумента fr
f1()
.
Наконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
,round(coef,1)) titl = " The value is:" } plot(numbers ~ days, xlim= limx, ylim= limy, xlab = var1, ylab=var2, xaxs='i',data = datas,main = paste0(dmda, "-", CategoryChosse)) legend("topright", legend= leg,title=titl,title.col = "black", cex = 1.2) if (nrow(datas)lt;=2){ abline(h=m,lwd=2) points(0, m, col = "red", pch = 19, cex = 2, xpd = TRUE) text(.1,m .5, round(m,1), cex=1.1,pos=4,offset =1,col="black") } else{ new.data lt;- data.frame(days = with(datas, seq(min(days),max(days),len = 45))) new.data lt;- rbind(0, new.data) lines(new.data$days,predict(mod,newdata = new.data),lwd=2) points(0, coef, col="red",pch=19,cex = 2,xpd=TRUE) text(.99,coef 1,max(0, round(coef,1)), cex=1.1,pos=4,offset =1,col="black") } } return(val) } ui lt;- fluidPage( shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE, br(), tabPanel("", sidebarLayout( sidebarPanel( uiOutput("date"), uiOutput("mycode")), mainPanel( tabsetPanel( tabPanel("Graph1", plotOutput("graph",width = "100%", height = "600")), tabPanel("Graph2", plotOutput("graph2",width = "100%", height = "600")) ) )) ))) server lt;- function(input, output,session) { data lt;- reactive(function.test()) output$date lt;- renderUI({ req(data()) all_dates lt;- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day") disabled lt;- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01") dateInput(input = "date2", label = h4("Choose"), min = min(data()$date2), max = max(data()$date2), value = NA, datesdisabled = disabled) }) output$mycode lt;- renderUI({ req(input$date2) df1 lt;- data() df2 lt;- df1[as.Date(df1$date2) %in% input$date2,] selectInput("code", label = h4("Category"),choices=unique(df2$Category)) }) output$graph lt;- renderPlot({ req(input$date2,input$code) var1 = "Days" var2 = "Numbers" f1(data(),as.character(input$date2),as.character(input$code),var1,var2,plot=TRUE, graf=1) }) output$graph2 lt;- renderPlot({ req(input$date2,input$code) var1 = "Reserv" var2 = "Weekdays" f1(data(),as.character(input$date2),as.character(input$code),var1,var2,1,plot=TRUE, graf=2) }) } shinyApp(ui = ui, server = server)
Ответ №1:
Мы можем создать новые функции, называемые round_0 и round_1.
затем выберите один из них и передайте его в качестве аргумента fr
f1()
.
Наконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
, fr(m)) else leg = paste('USНаконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
, round(m,1)) else leg = paste('US
Ответ №1:
Мы можем создать новые функции, называемые round_0 и round_1.
затем выберите один из них и передайте его в качестве аргумента fr
f1()
.
Наконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
,round(coef,1)) titl = " The value is:" } plot(numbers ~ days, xlim= limx, ylim= limy, xlab = var1, ylab=var2, xaxs='i',data = datas,main = paste0(dmda, "-", CategoryChosse)) legend("topright", legend= leg,title=titl,title.col = "black", cex = 1.2) if (nrow(datas)lt;=2){ abline(h=m,lwd=2) points(0, m, col = "red", pch = 19, cex = 2, xpd = TRUE) text(.1,m .5, round(m,1), cex=1.1,pos=4,offset =1,col="black") } else{ new.data lt;- data.frame(days = with(datas, seq(min(days),max(days),len = 45))) new.data lt;- rbind(0, new.data) lines(new.data$days,predict(mod,newdata = new.data),lwd=2) points(0, coef, col="red",pch=19,cex = 2,xpd=TRUE) text(.99,coef 1,max(0, round(coef,1)), cex=1.1,pos=4,offset =1,col="black") } } return(val) } ui lt;- fluidPage( shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE, br(), tabPanel("", sidebarLayout( sidebarPanel( uiOutput("date"), uiOutput("mycode")), mainPanel( tabsetPanel( tabPanel("Graph1", plotOutput("graph",width = "100%", height = "600")), tabPanel("Graph2", plotOutput("graph2",width = "100%", height = "600")) ) )) ))) server lt;- function(input, output,session) { data lt;- reactive(function.test()) output$date lt;- renderUI({ req(data()) all_dates lt;- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day") disabled lt;- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01") dateInput(input = "date2", label = h4("Choose"), min = min(data()$date2), max = max(data()$date2), value = NA, datesdisabled = disabled) }) output$mycode lt;- renderUI({ req(input$date2) df1 lt;- data() df2 lt;- df1[as.Date(df1$date2) %in% input$date2,] selectInput("code", label = h4("Category"),choices=unique(df2$Category)) }) output$graph lt;- renderPlot({ req(input$date2,input$code) var1 = "Days" var2 = "Numbers" f1(data(),as.character(input$date2),as.character(input$code),var1,var2,plot=TRUE, graf=1) }) output$graph2 lt;- renderPlot({ req(input$date2,input$code) var1 = "Reserv" var2 = "Weekdays" f1(data(),as.character(input$date2),as.character(input$code),var1,var2,1,plot=TRUE, graf=2) }) } shinyApp(ui = ui, server = server)
Ответ №1:
Мы можем создать новые функции, называемые round_0 и round_1.
затем выберите один из них и передайте его в качестве аргумента fr
f1()
.
Наконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
,fr(coef)) titl = » The value is:» } plot(numbers ~ days, xlim= limx, ylim= limy, xlab = var1, ylab=var2, xaxs=’i’,data = datas,main = paste0(dmda, «-«, CategoryChosse)) legend(«topright», legend= leg,title=titl,title.col = «black», cex = 1.2) if (nrow(datas)lt;=2){ abline(h=m,lwd=2) points(0, m, col = «red», pch = 19, cex = 2, xpd = TRUE) text(.1,m .5, fr(m), cex=1.1,pos=4,offset =1,col=»black») } else{ new.data lt;- data.frame(days = with(datas, seq(min(days),max(days),len = 45))) new.data lt;- rbind(0, new.data) lines(new.data$days,predict(mod,newdata = new.data),lwd=2) points(0, coef, col=»red»,pch=19,cex = 2,xpd=TRUE) text(.99,coef 1,max(0, fr(coef)), cex=1.1,pos=4,offset =1,col=»black») } } return(val) }
Наконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
, round(m,1)) else leg = paste(‘US
Ответ №1:
Мы можем создать новые функции, называемые round_0 и round_1.
затем выберите один из них и передайте его в качестве аргумента fr
f1()
.
Наконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.
,round(coef,1)) titl = » The value is:» } plot(numbers ~ days, xlim= limx, ylim= limy, xlab = var1, ylab=var2, xaxs=’i’,data = datas,main = paste0(dmda, «-«, CategoryChosse)) legend(«topright», legend= leg,title=titl,title.col = «black», cex = 1.2) if (nrow(datas)lt;=2){ abline(h=m,lwd=2) points(0, m, col = «red», pch = 19, cex = 2, xpd = TRUE) text(.1,m .5, round(m,1), cex=1.1,pos=4,offset =1,col=»black») } else{ new.data lt;- data.frame(days = with(datas, seq(min(days),max(days),len = 45))) new.data lt;- rbind(0, new.data) lines(new.data$days,predict(mod,newdata = new.data),lwd=2) points(0, coef, col=»red»,pch=19,cex = 2,xpd=TRUE) text(.99,coef 1,max(0, round(coef,1)), cex=1.1,pos=4,offset =1,col=»black») } } return(val) } ui lt;- fluidPage( shiny::navbarPage(theme = shinytheme(«flatly»), collapsible = TRUE, br(), tabPanel(«», sidebarLayout( sidebarPanel( uiOutput(«date»), uiOutput(«mycode»)), mainPanel( tabsetPanel( tabPanel(«Graph1», plotOutput(«graph»,width = «100%», height = «600»)), tabPanel(«Graph2», plotOutput(«graph2»,width = «100%», height = «600»)) ) )) ))) server lt;- function(input, output,session) { data lt;- reactive(function.test()) output$date lt;- renderUI({ req(data()) all_dates lt;- seq(as.Date(‘2021-01-01’), as.Date(‘2021-01-15’), by = «day») disabled lt;- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = «1970-01-01») dateInput(input = «date2», label = h4(«Choose»), min = min(data()$date2), max = max(data()$date2), value = NA, datesdisabled = disabled) }) output$mycode lt;- renderUI({ req(input$date2) df1 lt;- data() df2 lt;- df1[as.Date(df1$date2) %in% input$date2,] selectInput(«code», label = h4(«Category»),choices=unique(df2$Category)) }) output$graph lt;- renderPlot({ req(input$date2,input$code) var1 = «Days» var2 = «Numbers» f1(data(),as.character(input$date2),as.character(input$code),var1,var2,plot=TRUE, graf=1) }) output$graph2 lt;- renderPlot({ req(input$date2,input$code) var1 = «Reserv» var2 = «Weekdays» f1(data(),as.character(input$date2),as.character(input$code),var1,var2,1,plot=TRUE, graf=2) }) } shinyApp(ui = ui, server = server)
Ответ №1:
Мы можем создать новые функции, называемые round_0 и round_1.
затем выберите один из них и передайте его в качестве аргумента fr
f1()
.
Наконец, внутри сервера измените вывод$graph*.
В качестве альтернативы floor()
округлим до наименьшего целого числа.
Комментарии:
1. Спасибо за ответ, какова функция библиотеки
partial
? Когда я запускаюround_0
, он появляется:could not find function "partial"
2.
partial
находится вpurrr
библиотеке, вы можете загрузить его с помощьюlibrary(tidyverse)
илиlibrary(purrr)
.