library(tidyverse) paigutuskoef=0.01 ettevalmistus <- function(sisend){ v_norm <<- sisend %>% mutate_if(is.numeric, function(tulp){(tulp-min(tulp))/(max(tulp)-min(tulp))}) asukohad <<- tibble(isik=v_norm$isik, x=0, y=0) nurgad=sapply(1:nrow(v_norm), function(nr) {nr*2*pi/nrow(v_norm)}) asukohad$x <<- cos(nurgad) asukohad$y <<- sin(nurgad) } spordikaugus<- function(nr1, nr2){ andmed1=slice(v_norm %>% select(-isik), nr1) %>% unlist(., use.names = FALSE) andmed2=slice(v_norm %>% select(-isik), nr2) %>% unlist(., use.names = FALSE) vahed=andmed2-andmed1 return (sqrt(sum(vahed ** 2))) } joonisekaugus<- function(nr1, nr2){ andmed1=slice(asukohad %>% select(-isik), nr1) %>% unlist(., use.names = FALSE) andmed2=slice(asukohad %>% select(-isik), nr2) %>% unlist(., use.names = FALSE) vahed=andmed2-andmed1 return (sqrt(sum(vahed ** 2))) } nihuta<- function(nr1, nr2, vahe){ andmed1=slice(asukohad %>% select(-isik), nr1) %>% unlist(., use.names = FALSE) andmed2=slice(asukohad %>% select(-isik), nr2) %>% unlist(., use.names = FALSE) vahed=andmed2-andmed1 andmed1=andmed1+vahe*vahed*paigutuskoef asukohad[nr1, "x"] <<- andmed1[1] asukohad[nr1, "y"] <<- andmed1[2] } paigutaPaar<- function(nr1, nr2){ #esimest teise suhtes vahe=joonisekaugus(nr1, nr2)-spordikaugus(nr1, nr2) nihuta(nr1, nr2, vahe) } paigutaIsik <- function(nr1){ for(nr in 1:nrow(asukohad)){ if(nr!=nr1){ paigutaPaar(nr1, nr) } } } paigutaIsikud <- function(){ for(nr in 1:nrow(asukohad)){ paigutaIsik(nr) } } voistlejad=read_csv("http://minitorn.tlu.ee/~jaagup/kool/java/kursused/19/r/naited/1031/spordipaev_andmed.csv"); ettevalmistus(voistlejad) ui <- fluidPage( actionButton("nupp1", "Vajuta"), plotOutput("tahvel1") ) server <- function(input, output){ uuendus <- reactiveTimer(1000) output$tahvel1 <- renderPlot({ uuendus() paigutaIsikud() asukohad %>% ggplot(aes(x, y, label=isik)) + geom_text() }) observeEvent(input$nupp1, {ettevalmistus(voistlejad)}) } shinyApp(ui = ui, server = server)