Open zantavcar opened 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
.
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
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.
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.)
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
.
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 ?
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.
Posodobil sem še datoteki ui.R in server.R.
V redu, sem posodobil povezavo.
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č