GalDrnovsek / Fuzbal

MIT License
0 stars 0 forks source link

Dokončan projekt in težava pri Shiny #2

Open zantavcar opened 7 years ago

zantavcar commented 7 years ago

Pozdravljeni, naredili smo Shiny in projekt načeloma zaključen, verjetno je še kakšna pomankljivost.

Pri Shiny ne znam rešiti tega, da bi bilo npr v outputu tekma1 ne le tekme, ki jih ekipa igra doma, temveč tudi tiste, ki jih igra v gosteh. Filter je namreč zaenkrat tako naštiman, da vrne le domače tekme, ne najdem pa unčikovitega načina, da bi prikazalo tudi tekme, ki jih ekipa igra v gosteh.

Želel bi torej, da vrne tabelo, kjer se želena ekipa (iz inputa) pojavi v vsaj enem stolpcu (DEkipa ali GEkipa)

Vnaprej hvala za pomoč

jaanos commented 7 years ago

Shiny aplikacije ne morem zagnati, saj se sklicujete na spremenljivke, ki jih niste definirali. Poskrbite torej, da bo aplikacijo mogoče pognati s praznim okoljem (v zavihku Environment desno zgoraj kliknite na metlico, da počistite nastavljene spremenljivke). V server.r naj se torej vzpostavi povezava z bazo in se definira potrebne tabele. Če je kateri od elementov v ui.r odvisen od podatkov iz baze (npr. seznam ekip), ga lahko generirate v server.r z renderUI in prikažete v ui.r z uiOutput Pazite, da tak element na začetku še ne bo obstajal, zato lahko na začetku pride do napak pri elementih, ki se nanj sklicujejo - v tem primeru popravite kodo tako, da preverite, ali imate vse potrebno za prikaz.

Če hočete podati disjunkcijo dveh pogojev, to naredite z operatorjem |, npr. DEkipa == input$ekipa2 | GEkipa == input$ekipa2.

GalDrnovsek commented 7 years ago

Ko poženem server.r, se v konzoli izpiše; "Warning: Error in postgresqlExecStatement: RS-DBI driver: (could not Retrieve the result : ERROR: permission denied for relation tabelaEkipa)" . Ne vem točno, zakaj javlja napako, ker v primeru, ko ni vzpostavljena povezava z bazo, vse dela normalno. Ali mogoče veste, kje je problem?

Hvala

jaanos commented 7 years ago

Kolikor vidim, uporabniku javnost niste dali pravice branja tabel - glejte nocmatic/prevozi#4.

Sicer pa sam dobim napako, da spremenljivka team ni definirana (v ui.r). Glede tega glejte zgornji komentar.

GalDrnovsek commented 7 years ago

Hvala, ali lahko zdaj pogledate, če tudi vam dela shiny aplikacija ?

(Tabele so uvožene iz datoteke uvoz/uvoz.r in ne iz baze, ker se je v primeru, ko sem jih uvozil iz baze, pojavila napaka Ajax Error in nič ni delalo-koda, ki uvozi tabele iz baze, je v datoteki server1.R.)

jaanos commented 7 years ago

Aplikacija mi sedaj deluje, če popravim poti uvoženih programov (npr. ../auth_public.r). Seveda pa naj aplikacija deluje z bazo - nikjer naj torej ne kliče uvoz.r.

Problemi se pojavljajo, ker dplyr ne vrača razpredelnic (data.frame), pač pa objekte, ki predstavljajo, poizvedbo, in jih je potrebno pred prikazom pretvoriti v razpredelnice. Prikaz besedila lahko potem naredite npr. tako:

    output$stadion1 <- renderText({
      data <- tbl.ekipa %>% filter(ekipa == input$ekipa1)%>% select(stadion, kapaciteta) %>%
        data.frame()
      paste0("Stadion in kapaciteta: ", data$stadion,", ",data$kapaciteta )
    })

Da se izognete napakam, ko podatki niso izbrani, lahko uporabite funkciji validate in need:

    output$tabela1 <- renderDataTable({
      validate(need(!is.null(input$ekipa1), "Izberi prvo ekipo!"))
      validate(need(length(input$pozicija) >= 1, "Izberi pozicijo!"))
      pos <- c(input$pozicija, NA) # prisilimo dplyr, da podatke predstavi kot vektor
      tbl.igralcev %>% filter(ekipa == input$ekipa1, pozicija %in% pos) %>%
        select(igralec,pozicija,nastopi,podaje,goli) %>% data.frame()
    }, options = list(searching = FALSE, paging = FALSE))

Primerjavo datumov lahko prav tako prepustite bazi:

    output$tekma2 <- renderDataTable({
      validate(need(!is.null(input$ekipa2), "Izberi drugo ekipo!"))
      validate(need(length(input$zacetek) == 1 && length(input$konec) == 1,
                    "Izberi začetni in končni datum!"))
      tbl.tekma %>% filter(d_ekipa == input$ekipa2 | g_ekipa == input$ekipa2,
                           datum > input$zacetek, datum < input$konec) %>%
        select(datum, "Domači" = d_ekipa, "Gostje" = g_ekipa, "Goli domačih" = d_gol,
               "Goli gostov" = g_gol) %>% data.frame()
      }, options = list(searching = FALSE, paging = FALSE))

V ui.R tudi ne kličite uvoz.r - dovolj bo, če skopirate definicije vektorjev team in position.

GalDrnovsek commented 7 years ago

Najlepša hvala, zdaj vse dela. Edino šumnikov shiny ne izpiše pravilno, kar je čudno, ker so v bazi izpisani pravilno. Pri options sem nastavil encoding na UTF-8, pa ne pomaga.

Ali se zdaj lahko prijavimo na ustni izpit ?

jaanos commented 7 years ago

Shiny zna imeti težave s šumniki na Windowsih (pri meni na Linuxu šumniki delujejo). Morda lahko poskusite na roko nastaviti kodiranje znakov za problematične stolpce, npr.

      igralci <- tbl.igralcev %>% filter(ekipa == input$ekipa1, pozicija %in% pos) %>%
        select(igralec,pozicija,nastopi,podaje,goli) %>% data.frame()
      Encoding(igralci$igralec) <- "UTF-8"
      igralci

Iz ui.R še odstranite vrstico options(encoding="UTF-8"), da se to ne bo izpisalo na dnu.

Sicer pa je zdaj v redu, tako da bom dodal povezavo na repozitorij predmeta in se lahko s profesorjem domenite za termin zagovora. Če boste še kaj spreminjali, mi javite, da posodobim povezavo.

GalDrnovsek commented 7 years ago

Posodobil sem še datoteki ui.R in server.R.

jaanos commented 7 years ago

V redu, sem posodobil povezavo.