From 06e3bd21b016f661c2720eb922ed55054a0cf030 Mon Sep 17 00:00:00 2001 From: s426228 Date: Tue, 19 Jan 2021 23:04:09 +0100 Subject: [PATCH] raporty i znaki --- .Rhistory | 295 ++++++++++++++++++++++++++++++++++++ app/about.R | 8 +- app/klasyfikator.R | 55 +++++-- app/login_module.R | 2 +- app/profil_module.R | 244 ++++++++++++++--------------- app/report1.Rmd | 18 +++ app/report1.aux | 19 +++ app/report1.out | 0 app/report1.pdf | Bin 0 -> 51915 bytes backend/.idea/workspace.xml | 33 +++- 10 files changed, 535 insertions(+), 139 deletions(-) create mode 100644 .Rhistory create mode 100644 app/report1.Rmd create mode 100644 app/report1.aux create mode 100644 app/report1.out create mode 100644 app/report1.pdf diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 0000000..f759cde --- /dev/null +++ b/.Rhistory @@ -0,0 +1,295 @@ +shiny::runApp('ap1') +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +p("Shiny jest dostpny w repozytorium CRAN, wiec mozesz zainstalowac go w zwykly sposob z konsoli R:"), +code("install.packages(\"shiny\")"), +br(), +br(), +br(), +br(), +img(src = "rstudio.png", height = 60, width = 200), +p("Shiny jest produktem",span("RStudio", style = "color:red")) +), +mainPanel( +h1("Wprowadzenie do Shiny", align = "left"), +p("Shiny jest nowym pakietem RStudio, ktory",em("bardzo ulatwia"),"tworzenie interaktywnych aplikacji internetowych w R."), +br(), +p("Duzo informacji i przykladow znajduje sie na",a("stronie Shiny."),""), +br(), +br(), +h2("Ficzery"), +p("-Tworz uzyteczne aplikacje internetowe zaledwie kilkoma liniami kodu - nie jest wymagana znajomosc JavaScriptu"), +p("-Aplikacje Shiny aktualizuja sie tak samo" ,strong("szybko"),"jak arkusze danych np. Excel. Wyniki zmieniaja sie natychmiast - gdy uzytkownicy modyfikuja dane wejsciowe, nie ma koniecznosci ponownego przeladowania strony.") +) +) +) +server <- function(input, output) { +} +shinyApp(ui = ui, server = server) +runApp('ap1') +shiny::runApp('C:/Users/plalj/Desktop/TakeCareApp/app') +# summarize accuracy +table(predictions, iris$Species) +library(VGAM) +# load data +data(iris) +# fit model +fit <- vglm(Species~., family=multinomial, data=iris) +# summarize the fit +summary(fit) +# make predictions +probabilities <- predict(fit, iris[,1:4], type="response") +predictions <- apply(probabilities, 1, which.max) +predictions[which(predictions=="1")] <- levels(iris$Species)[1] +predictions[which(predictions=="2")] <- levels(iris$Species)[2] +predictions[which(predictions=="3")] <- levels(iris$Species)[3] +# summarize accuracy +table(predictions, iris$Species) +# load the package +library(MASS) +data(iris) +# fit model +fit <- lda(Species~., data=iris) +# summarize the fit +summary(fit) +# make predictions +predictions <- predict(fit, iris[,1:4])$class +# summarize accuracy +table(predictions, iris$Species) +# fit model +fit <- lda(Species~., data=iris) +fit +# summarize the fit +summary(fit) +# make predictions +predictions <- predict(fit, iris[,1:4])$class +predictions +# summarize accuracy +table(predictions, iris$Species) +shiny::runApp('C:/Users/plalj/Desktop/TakeCareApp/app') +setwd("C:/Users/plalj/Desktop/TakeCareApp") +shiny::runApp('app') +runApp('app') diff --git a/app/about.R b/app/about.R index fc59bbd..2d2e73e 100644 --- a/app/about.R +++ b/app/about.R @@ -13,16 +13,16 @@ aboutUI <- function(id){ tags$link(rel = "stylesheet", type = "text/css", href = "style.css") ), fluidPage( - h1("Kim jestesmy?", align = "center"), + h1("Kim jesteśmy?", align = "center"), br(), - h4("Jestesmy mlodym dynamicznym zespolem wdrazajacym sie w swiat tworzenia profesjonalnych aplikacji"), - h4("Nasz zespol sklada sie z:"), + h4("Jesteśmy młodym dynamicznym zespołem wdrażającym się w świat tworzenia profesjonalnych aplikacji"), + h4("Nasz zespół składa się z:"), br(), fluidRow(column(4, div(div("Jan Przybylski"),img(src="jp.png", height = 150, width = 150)))%>% tagAppendAttributes(class = 'column-tile'), column(4, - div(div("Rafal Piskorski"),img(src="rafal.png", height = 150, width = 150)))%>% tagAppendAttributes(class = 'column-tile'), + div(div("Rafał Piskorski"),img(src="rafal.png", height = 150, width = 150)))%>% tagAppendAttributes(class = 'column-tile'), column(4, div(div("Robert Tarnas"),img(src="robert.png", height = 150, width = 150)))%>% tagAppendAttributes(class = 'column-tile'), diff --git a/app/klasyfikator.R b/app/klasyfikator.R index ef35de8..a67c4a1 100644 --- a/app/klasyfikator.R +++ b/app/klasyfikator.R @@ -20,14 +20,15 @@ klasyui <- function(id){ min = 1, max = 100, value = 1), - selectInput("selectKlas1",strong("Zaburzenia polykania"),choices = list("Nie"=0,"Tak"=1),selected=0), - selectInput("selectKlas2",strong("Bol przy polykaniu"),choices = list("Nie"=0,"Tak"=1),selected=0), + selectInput("selectKlas1",strong("Zaburzenia połykania"),choices = list("Nie"=0,"Tak"=1),selected=0), + selectInput("selectKlas2",strong("Ból przy połykaniu"),choices = list("Nie"=0,"Tak"=1),selected=0), selectInput("selectKlas3",strong("Kaszel"),choices = list("Nie"=0,"Tak"=1),selected=0), - selectInput("selectKlas4",strong("Dusznosci i swiszczacy oddech"),choices = list("Nie"=0,"Tak"=1),selected=0), - selectInput("selectKlas5",strong("Odkrztuszanie wydzieliny z krwia i chrypka"),choices = list("Nie"=0,"Tak"=1),selected=0), - selectInput("selectKlas6",strong("Guz w obrebie gruczolu piersiowego"),choices = list("Nie"=0,"Tak"=1),selected=0), - selectInput("selectKlas7",strong("Zmiany skorne wokol brodawki."),choices = list("Nie"=0,"Tak"=1),selected=0), - selectInput("selectKlas8",strong("Wyciek z brodawki (zwlaszcza krwisty)"),choices = list("Nie"=0,"Tak"=1),selected=0) + selectInput("selectKlas4",strong("Duszności i świszczący oddech"),choices = list("Nie"=0,"Tak"=1),selected=0), + selectInput("selectKlas5",strong("Odkrztuszanie wydzieliny z krwią i chrypka"),choices = list("Nie"=0,"Tak"=1),selected=0), + selectInput("selectKlas6",strong("Guz w obrębie gruczołu piersiowego"),choices = list("Nie"=0,"Tak"=1),selected=0), + selectInput("selectKlas7",strong("Zmiany skórne wokół brodawki"),choices = list("Nie"=0,"Tak"=1),selected=0), + selectInput("selectKlas8",strong("Wyciek z brodawki (zwłaszcza krwisty)"),choices = list("Nie"=0,"Tak"=1),selected=0), + downloadButton("report1", "Generuj raport") ) @@ -96,18 +97,52 @@ klasyserver <- function(input, output,session) { } #print(pi*100) z=100-(k+p+pi)/3 - x=c("Rak krtani","Rak piersi","Rak pluc","Zdrowy") + x=c("Rak krtani","Rak piersi","Rak płuc","Zdrowy") y=c(k,pi,p,z) d=data.frame(x,y) - print(d) + #print(d) #z=0.0029*as.numeric(input$slider1) g=ggplot(d, aes(x,y,fill=x))+ geom_col()+ - labs(x="",y="Prawdopodobienstwo [%]") + labs(x="",y="Prawdopodobieństwo [%]") ggplotly(g) }) + + output$report1 <- downloadHandler( + + filename = "raport.pdf", + content = function(file) { + + tempReport <- file.path(tempdir(), "report1.Rmd") + file.copy("report1.Rmd", tempReport, overwrite = TRUE) + + k=(0.01*as.numeric(input$sliderKlas1)+0.1*as.numeric(input$selectKlas1)+0.1*as.numeric(input$selectKlas2))*100 + if(k>100){ + k=100 + } + p=(0.01*as.numeric(input$sliderKlas1)+0.1*as.numeric(input$selectKlas3)+0.1*as.numeric(input$selectKlas4)+0.1*as.numeric(input$selectKlas5))*100 + if(p>100){ + p=100 + } + #print(p*100) + pi=(0.01*as.numeric(input$sliderKlas1)+0.1*as.numeric(input$selectKlas6)+0.1*as.numeric(input$selectKlas7)+0.1*as.numeric(input$selectKlas8))*100 + if(pi>100){ + pi=100 + } + #print(pi*100) + z=100-(k+p+pi)/3 + + params <- list(n = k,k=p,l=pi,m=z) + + + rmarkdown::render(tempReport, output_file = file, + params = params, + envir = new.env(parent = globalenv()) + ) + } + ) } diff --git a/app/login_module.R b/app/login_module.R index 19167e7..4ecec51 100644 --- a/app/login_module.R +++ b/app/login_module.R @@ -87,7 +87,7 @@ loginServer <- function(input, output,session) { if (isCorrect()==TRUE){ p("OK",style="color:white;text-align:center;") }else{ - p("Uzytkownik nie istnieje lub wprowadzono bledne dane",style="color:yellow;text-align:center;") + p("Użytkownik istnieje lub wprowadzono błędne dane",style="color:yellow;text-align:center;") } }) diff --git a/app/profil_module.R b/app/profil_module.R index bef588e..0dc9544 100644 --- a/app/profil_module.R +++ b/app/profil_module.R @@ -8,20 +8,20 @@ profilUI <- function(id) { ns <- NS(id) fluidPage( useShinyjs(), - tags$head( - tags$script(src="js.cookie.js"), - tags$script('Shiny.addCustomMessageHandler("tokenHandlerUpdate", + tags$head( + tags$script(src="js.cookie.js"), + tags$script('Shiny.addCustomMessageHandler("tokenHandlerUpdate", function(token) { sessionStorage.setItem(\'token\', token); Shiny.onInputChange("token", token); } );'), - tags$script('Shiny.addCustomMessageHandler("profileActiveTabHandler", + tags$script('Shiny.addCustomMessageHandler("profileActiveTabHandler", function(arg) { Shiny.onInputChange("profileActiveTab", 1); } );'), - tags$script('Shiny.addCustomMessageHandler("viewPage", + tags$script('Shiny.addCustomMessageHandler("viewPage", function(page,token,auth) { Shiny.onInputChange("token", token); Shiny.onInputChange("auth", auth); @@ -29,34 +29,34 @@ profilUI <- function(id) { window.location.href=page; } );'), - - - tags$style(HTML(" + + + tags$style(HTML(" @import url('//fonts.googleapis.com/css?family=Lobster|Cabin:400,700'); @import url('//fonts.googleapis.com/css2?family=Fjalla+One'); ")), - tags$link(rel = "stylesheet", type = "text/css", href = "profile.css") + tags$link(rel = "stylesheet", type = "text/css", href = "profile.css") ), - - # theme = "style.css", - - - # App title ---- - - uiOutput("afterLogin"), - - - - - fluidRow( - column(12, - tags$span("Copyright Wszystkie prawa zastrzezone."))%>% tagAppendAttributes(id = 'column-copyright'), - )%>% tagAppendAttributes(id = 'row-footer') - - -)} + # theme = "style.css", + + + # App title ---- + + uiOutput("afterLogin"), + + + + + fluidRow( + column(12, + tags$span("Copyright Wszystkie prawa zastrzeżone."))%>% tagAppendAttributes(id = 'column-copyright'), + + )%>% tagAppendAttributes(id = 'row-footer') + + + )} profilServer <- function(input, output,session) { @@ -72,20 +72,20 @@ profilServer <- function(input, output,session) { getEditStatus <- eventReactive(input$editSubmit, { editedPersonalData<-data.frame(name<-input$editName, - surname<-input$editSurname, - mail<-input$editMail, - datebirth<-input$editAge, - gender<-input$editGender) + surname<-input$editSurname, + mail<-input$editMail, + datebirth<-input$editAge, + gender<-input$editGender) - # reg<-c(grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,15}$",editedPersonalData$name), - # grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,20}$",editedPersonalData$surname), + # reg<-c(grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,15}$",editedPersonalData$name), + # grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,20}$",editedPersonalData$surname), # grepl("^[a-z]+[0-9]*@([a-z]{2,10}\\.)+[a-z]{2,5}$",editedPersonalData$mail)) - reg<-c(grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,15}$",editedPersonalData$name), - grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,20}$",editedPersonalData$surname), + reg<-c(grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,15}$",editedPersonalData$name), + grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,20}$",editedPersonalData$surname), grepl("^[a-z]+[0-9]*@([a-z]{2,10}\\.)+[a-z]{2,5}$",editedPersonalData$mail)) if(all(reg)){ - + personalData = list( name = editedPersonalData$name, surname = editedPersonalData$surname, @@ -98,7 +98,7 @@ profilServer <- function(input, output,session) { personalDataDTO = personalData) - + r<-httr::PUT("http://localhost:8080/api/profile",add_headers(Authorization=paste("Bearer",input$token,sep=" ")),body=to_send,encode = 'json') @@ -113,21 +113,21 @@ profilServer <- function(input, output,session) { } - + }) - + personalDataVector <- reactiveVal() historyDataVector <- reactiveVal() downloadPersonalData<-reactive({ - r<-httr::GET("http://localhost:8080/api/profile",add_headers(Authorization=paste("Bearer",input$token,sep=" "))) - r - - + r<-httr::GET("http://localhost:8080/api/profile",add_headers(Authorization=paste("Bearer",input$token,sep=" "))) + r + + }) downloadHistoryData<-reactive({ @@ -153,10 +153,10 @@ profilServer <- function(input, output,session) { } session$sendCustomMessage(type='tokenHandlerAccess',(session$clientData)$url_hash) } - + }) - + observeEvent(input$profileTabs,{ if(input$profileTabs=="data"){ @@ -184,53 +184,53 @@ profilServer <- function(input, output,session) { rr<-httr::GET("http://localhost:8080/api/prediction/usersPredictions/ind",add_headers(Authorization=paste("Bearer",input$token,sep=" ")),encode = 'json') historyDataVector(rr) - + } }) output$profileData<-renderUI({ r <- personalDataVector() - + if(length(r)!=0 & !is.null(r)){ - - if(r$status_code==200){ - response<-(content(r)) - - - session$sendCustomMessage(type='tokenHandlerUpdate', response$token) - - - fluidRow(column(12, - wellPanel( - textInput("editName", label = strong("Imie"),value=response$profil$personalDataDTO$name), - uiOutput("editName"), - textInput("editSurname", label = strong("Nazwisko"),value=response$profil$personalDataDTO$surname), - uiOutput("editSurname"), - textInput("editMail", label = strong("Adres email"),value=response$profil$personalDataDTO$email), - uiOutput("editMail"), - dateInput("editAge", label = strong("Data urodzenia") ,value=response$profil$personalDataDTO$datebirth), - - selectInput("editGender", label = strong("Plec"), - choices = list("Zenska" = 0, "meska" = 1), - selected = as.numeric(response$profil$personalDataDTO$gender)), - - - actionButton("editSubmit","Zapisz"), - uiOutput("btnEditProfile",style="color:red;") - + if(r$status_code==200){ + + response<-(content(r)) + + + session$sendCustomMessage(type='tokenHandlerUpdate', response$token) + + + fluidRow(column(12, + wellPanel( + textInput("editName", label = strong("Imię"),value=response$profil$personalDataDTO$name), + uiOutput("editName"), + textInput("editSurname", label = strong("Nazwisko"),value=response$profil$personalDataDTO$surname), + uiOutput("editSurname"), + textInput("editMail", label = strong("Adres email"),value=response$profil$personalDataDTO$email), + uiOutput("editMail"), + dateInput("editAge", label = strong("Data urodzenia") ,value=response$profil$personalDataDTO$datebirth), + + selectInput("editGender", label = strong("Płeć"), + choices = list("Żeńska" = 0, "męska" = 1), + selected = as.numeric(response$profil$personalDataDTO$gender)), + + + actionButton("editSubmit","Zapisz"), + uiOutput("btnEditProfile",style="color:red;") + ), - - )) - + + )) + + + } + } - - } - }) output$btnEditProfile<-renderUI({ @@ -238,7 +238,7 @@ profilServer <- function(input, output,session) { if (getEditStatus()==TRUE){ p("OK",style="color:green;text-align:center;") }else{ - p("Uzytkownik istnieje lub wprowadzono bledne dane",style="color:red;text-align:center;") + p("Użytkownik istnieje lub wprowadzono błędne dane",style="color:red;text-align:center;") } @@ -248,21 +248,21 @@ profilServer <- function(input, output,session) { output$afterLogin<-renderUI({ if(!is.null(input$auth) & length(input$auth)>0 ){ fluidRow( - + column(12, tabsetPanel(id="profileTabs",type = "tabs", tabPanel("Dane profilowe",value="data", tags$div(uiOutput("profileData") ) %>% tagAppendAttributes(id = 'content-personal')), - + tabPanel("Historia pomiarów",value='history', tags$div(DT::dataTableOutput("historyTable",height = "auto"))%>% tagAppendAttributes(id="profileTabs",class = 'content-wrapper')) ))%>% tagAppendAttributes(id = 'column-profile') - + ) %>% tagAppendAttributes(id = 'row-content') }else{ } - + }) @@ -286,43 +286,43 @@ profilServer <- function(input, output,session) { change_page(paste("?id=",input$view_button,"#!/iota",sep=""), session = session, mode = "push") }) - + output$historyTable <- DT::renderDataTable({ r <- historyDataVector() if(is.null(content(r)$predictions)){ DT::datatable(data.frame(Nazwa=character(),Wynik=numeric(),Data=character()),options = list(scrollX = TRUE,language=pl)) }else{ - df_historyTable<-as.data.frame(do.call(rbind, (content(r)$predictions))) - - - historyTableButtons = list() - - for(rowNumber in 1:nrow(df_historyTable)){ - + df_historyTable<-as.data.frame(do.call(rbind, (content(r)$predictions))) - historyTableButtons[[rowNumber]] <-list(shinyInput(actionButton, 1, as.character(df_historyTable[rowNumber,]$id[1]), label = "Pokaż", onclick = 'Shiny.onInputChange(\"view_button\", this.id)' ), - shinyInput(actionButton, 1, as.character(df_historyTable[rowNumber,]$id[1]), label = "Usuń", onclick = 'Shiny.onInputChange(\"del_button\", this.id)')) - } - - df_historyTable<-df_historyTable %>% - mutate(Akcja=historyTableButtons)%>% - select(name,resultValue,localDateTime,Akcja) %>% - rename( - Nazwa = name, - Wynik = resultValue, - Data = localDateTime - ) - - df_historyTable$Nazwa<-do.call(c, df_historyTable$Nazwa) - df_historyTable$Wynik<-do.call(c, df_historyTable$Wynik) - df_historyTable$Data<-do.call(c, df_historyTable$Data) - - - DT::datatable(df_historyTable,selection="none",options = list(scrollX = TRUE,language=pl))} + + historyTableButtons = list() + + for(rowNumber in 1:nrow(df_historyTable)){ + + + historyTableButtons[[rowNumber]] <-list(shinyInput(actionButton, 1, as.character(df_historyTable[rowNumber,]$id[1]), label = "Pokaż", onclick = 'Shiny.onInputChange(\"view_button\", this.id)' ), + shinyInput(actionButton, 1, as.character(df_historyTable[rowNumber,]$id[1]), label = "Usuń", onclick = 'Shiny.onInputChange(\"del_button\", this.id)')) + } + + df_historyTable<-df_historyTable %>% + mutate(Akcja=historyTableButtons)%>% + select(name,resultValue,localDateTime,Akcja) %>% + rename( + Nazwa = name, + Wynik = resultValue, + Data = localDateTime + ) + + df_historyTable$Nazwa<-do.call(c, df_historyTable$Nazwa) + df_historyTable$Wynik<-do.call(c, df_historyTable$Wynik) + df_historyTable$Data<-do.call(c, df_historyTable$Data) + + + DT::datatable(df_historyTable,selection="none",options = list(scrollX = TRUE,language=pl))} # } - }) + }) output$plot3 <- renderPlotly({ @@ -353,13 +353,13 @@ profilServer <- function(input, output,session) { pl <- list( emptyTable="Tabela jest pusta", sSearch = "Szukaj", - sInfo="Wyniki od _START_ do _END_ z _TOTAL_ rekordow", - sZeroRecords="Brak rekordow", + sInfo="Wyniki od _START_ do _END_ z _TOTAL_ rekordów", + sZeroRecords="Brak rekordów", sEmptyTable="Pusta tabela", oPaginate= list( - sFirst="Pierwsza", sPrevious="Poprzednia",sLast="Ostatnia", sNext="Nastepna" + sFirst="Pierwsza", sPrevious="Poprzednia",sLast="Ostatnia", sNext="Następna" ), - sLengthMenu = "Pokaz _MENU_ rekordow na stronie" + sLengthMenu = "Pokaż _MENU_ rekordów na stronie" ) output$table1 <- DT::renderDataTable(iris,options = list(scrollX = TRUE,language=pl)) @@ -370,7 +370,7 @@ profilServer <- function(input, output,session) { if (getStatus()==TRUE){ p("OK",style="color:white;text-align:center;") }else{ - p("Uzytkownik istnieje lub wprowadzono bledne dane",style="color:yellow;text-align:center;") + p("Użytkownik istnieje lub wprowadzono błędne dane",style="color:yellow;text-align:center;") } @@ -379,10 +379,10 @@ profilServer <- function(input, output,session) { output$editName<-renderUI({ s<-toString(input$editName) - if (s=="" | grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,15}$",s)==TRUE){ + if (s=="" | grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,15}$",s)==TRUE){ return() }else{ - p("Blad: Imie powinno zaczynac sie od wielkiej litery, zawierac jedynie litery i miec dlugosc od 3 do 15 znakow",style="color:yellow") + p("Bład: Imię powinno zaczynać się od wielkiej litery, zawierać jedynie litery i mieć długość od 3 do 15 znaków",style="color:yellow") } }) @@ -390,10 +390,10 @@ profilServer <- function(input, output,session) { output$editSurname<-renderUI({ s<-toString(input$editSurname) - if (s=="" | grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,20}$",s)==TRUE){ + if (s=="" | grepl("^[A-Z][a-zA-ZĄąĆćĘꣳŃńÓ󌜏źŻż]{2,20}$",s)==TRUE){ return() }else{ - p("Blad: Nazwisko powinno zaczynac sie od wielkiej litery, zawierac jedynie litery i miec dlugosc od 3 do 15 znaków",style="color:yellow") + p("Bład: Nazwisko powinno zaczynać sie od wielkiej litery, zawierać jedynie litery i mieć długość od 3 do 15 znakĂłw",style="color:yellow") } @@ -406,7 +406,7 @@ profilServer <- function(input, output,session) { if (s=="" | grepl("^[a-z]+[0-9]*@([a-z]{2,10}\\.)+[a-z]{2,5}$",s)==TRUE){ return() }else{ - p("Blad: Mail powinien miec budowe adres@nazwa.domena",style="color:yellow") + p("Bład: Mail powinien mieć budowę adres@nazwa.domena",style="color:yellow") } diff --git a/app/report1.Rmd b/app/report1.Rmd new file mode 100644 index 0000000..e5515b1 --- /dev/null +++ b/app/report1.Rmd @@ -0,0 +1,18 @@ +--- +title: "Dynamiczny raport dla klasyfikatora" +output: pdf_document +params: + n: NA + k: NA + l: NA + m: NA +--- + +Szansa na raka krtani: +`r params$n` +Szansa na raka płuc: +`r params$k` +Szansa na raka piersi: +`r params$l` +Szansa na bycie zdrowym: +`r params$m` diff --git a/app/report1.aux b/app/report1.aux new file mode 100644 index 0000000..50551d9 --- /dev/null +++ b/app/report1.aux @@ -0,0 +1,19 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\gdef \@abspage@last{1} diff --git a/app/report1.out b/app/report1.out new file mode 100644 index 0000000..e69de29 diff --git a/app/report1.pdf b/app/report1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e76515004569381a9b645889a76bd041d322c465 GIT binary patch literal 51915 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 - + + + + - + + + + @@ -168,6 +187,16 @@ + + + + + + + + +