Teraz dodamy dynamiczną tabelę z danymi, które zasymulowaliśmy w poprzedniej części, więc przede wszystkim musimy wprowadzić te dane do aplikacji i robimy to za pomocą linii pokazanej poniżej. Powinieneś umieścić tę linię ładowania danych powyżej obiektu ui w swojej aplikacji. W ten sposób zostanie uruchomiony tylko raz, podczas uruchamiania aplikacji Shiny, jak każdy kod, który normalnie byłby uruchamiany podczas wykonywania skryptu R:
ORIGINAL_DATA <-
read.csv(„../chapter-09/data.csv” , stringAsFators = FALSE)
W tym momencie musimy wprowadzić pakiet DT. Zapewnia łatwy sposób tworzenia dynamicznych tabel dla aplikacji Shiny. Ponieważ będziemy odwoływać się do niego poprzez nazwę pakietu, nie musimy go ładować z library(DT). Odwołanie się do niego przez nazwę pakietu pomaga nam oddzielić natywne funkcje Shiny od tych, które pochodzą z pakietów zewnętrznych. Aby to zaimplementować, musimy zmodyfikować funkcję server, której do tej pory nie ruszaliśmy. Musimy wprowadzić do niego pewną logikę, która pozwoli nam przenieść dane z R do interfejsu internetowego. Aby to osiągnąć, przypisujemy go do elementu table w jego parametrze output, który będzie działał jako obserwator. Nazwa elementu, który mu przypisujemy, może być dowolnym prawidłowym elementem listy, jaki sobie życzymy, ale dobrym pomysłem jest użycie po prostu nazw opisujących zawartość obserwatora. Pamiętaj, że te nazwy muszą być unikalne, ponieważ Shiny użyje ich do zidentyfikowania obiektów, które mają przechodzić między obiektem ui a funkcją server. Obserwator jest tworzony za pomocą funkcji renderDataTable() z pakietu DT. Ta funkja działa jak każda inna funkcja render*(), otrzymuje pojedynczy parametr, który jest wyrażeniem zwracającym wartość, która będzie treścią obserwatora. W tym przypadku tabela danych utworzona za pomocą funkcji datatable(), ponownie z pakietu DT. Aby utworzyć tę tabelę danych, po prostu przekazujemy obiekt ORIGINAL_DATA, który wcześniej załadowaliśmy. Teraz, gdy regulacja po stronie serwera jest zakończona, dodajemy w obiekcie ui fluidRow() zamiast „Content 2” a, aby wprowadzić wiersz, który dostosuje swoją długość do wymiarów przeglądarki internetowej, a wewnątrz niej wywołujemy funkcję dataTableOutput() z pakietu DT. Zauważ, że ciąg wysłany jako jedyny parametr do tej funkcji to nazwa elementu, który przypisaliśmy do parametru output w funkcji server. Oto mechanizm, którego używa Shiny do przenoszenia danych z server do ui:
ui <- fluidPage (
titlePanel(„Cryptourrency Markets”),
sidebarLayout (
sidebarPanel(„Options”),
mainPanel (
tabsetPanel (
tabPanel(„Simple Moving Averges”, „Content 1”),
tabPanel(„Data Overview”,
fluidRow(DT::dataTableOutput(„table”))
)
)
)
)
)
server <- function(input, output) {
output$table <-
DT :: renderDataTable(DT :: datatable({return(ORIGINAL_DATA)}))
Teraz, gdy nasz kod jest gotowy, na karcie Data Overview powinna pojawić się tabela. Ta tabela jest dynamiczna w tym sensie, że można uporządkować jej kolumny, klikając tytuły kolumn, a także zmienić liczbę wyświetlanych obserwacji i przeszukiwać jej zawartość. Zwróć również uwagę, że mechanizm paginacji został automatycznie dodany wraz z licznikiem obserwacji. Te tabele są bardzo łatwe do utworzenia, a jednocześnie bardzo przydatne, a w dalszej części zobaczymy, jak jeszcze bardziej rozszerzyć ich funkcjonalność.