Acg N. .
Temat: Metadane w R czyli "dlaczego nie ma tego w standardzie!?"
WstępPodczas pracy w ramach badań klinicznych bardzo przeszkadzał mi brak warstwy metadanych w R. Owszem, są do dyspozycji atrybuty, ale litości! nie będę za każdym razem dziergał kodu tam, gdzie np. SASowi wystarcza "length zmienna $10" (już nie wspomnę o pięknym: "zmienna $slownik.").
Jakiś czas temu napisałem kod pozwalający nadawać kolumnom ramek podstawowe atrybuty i wyświetlać te ramki zgodnie z przypisanymi metadanymi.
Obecnie kod został nieco dopracowany, choć nie jest jakoś szczególnie optymalizowany - spełnia moje wymagania i wypełnia lukę, która nie powinna mieć, moim zdaniem, miejsca.
Na razie zamieszczę ogólny opis i przykład, a odpowiednie funkcje - nieco później. Być może powstanie z tego pakiet eRowy. Nie jest to dużo, ale zawsze coś na początek.
Obsługiwane atrybuty:
* tytuł (nagłówek) kolumny, etykieta. Przydatne, gdy nazwy kolumn ramki są raptem kilkuznakowe (łatwo się nimi posługiwać), ale w finalnym dokumencie chcielibyśmy mieć tam dłuższy tekst. Indeksowanie pełną nazwą nie jest wygodne, a indeksowanie numerem kolumny - nie zawsze czytelne.
* "szerokość" kolumny znakowej, czyli maksymalna dopuszczalna długość tekstu w niej zawartego. Powyżej tej długości tekst jest ucinany.
* liczba miejsc dziesiętnych dla liczb zmiennoprzecinkowych. Zmienne typu integer są zawsze wyświetlane bez zer dziesiętnych (u mnie można to zmienić domyślną opcją)
* flaga wyświetlania liczb jako procent
* format daty i czasu
* flaga tłumaczenia wartości w kolumnie na podstawie zadanego słownika. Jeśli brak konkretnej wartości, pozostawiana jest wartość oryginalna
Zasada działania
Atrybuty w R są metadanymi, nie zmieniają zawartości oryginalnej zmiennej, a jedynie jej towarzyszą. Trzeba je wykorzystać we własnym zakresie.
Zasada działania jest prosta: przygotowujemy źródło danych, nadajemy kolumnom (wskazując je bezpośrednio lub po nazwie) potrzebne atrybuty i korzystamy z odpowiedniej funkcji, która "nakłada" te atrybuty na oryginalne dane i zwraca w wyniku ramkę z kolumnami zawierającymi odpowiednio spreparowane wartości tekstowe (do wyświetlania potrzebujemy wyłącznie napisów).
Możemy określić źródło metadanych. Może to być dana ramka, może być inna. Możemy zdecydować, czy nazwy kolumn również mają być tłumaczone, czy zachowane w oryginale. Jeśli brak tłumaczenia dla nazwy kolumny, zostanie użyta oryginalna nazwa.
Ramkę taką możemy już bezpośrednio wyświetlić lub zapisać. Istnieje także funkcja od razu wyświetlająca dany zbiór danych z wykorzystaniem źródła metadanych.
Dodatki
Aby praca z metadanymi była wygodna, potrzebne są dodatkowe narzędzia:
* funkcja opisująca źródło danych i nadane mu atrybuty. R ma takie narzędzia, np. "str", ale nie są one dla mnie zbyt "przyjemne w odbiorze" (subiektywna kwestia), więc napisałem własne. Pozwala się szybko zorientować, czy wszystkie atrybuty zostały właściwie przypisane i jaki jest bieżący typ zmiennej
* funkcje i operatory do kopiowania atrybutów między ramkami danych. Jest to bardzo ważne, ponieważ kopiowanie zmiennych za pomocą operatora przypisania nie powoduje skopiowania ich atrybutów. A nawet, jeśli go odpowiednio zdefiniujemy, to istnieją także funkcje tworzące nową ramkę danych w inny sposób ("budują ją" przez rbind, cbind i jeszcze inaczej), np. "sqldf", "order". Wtedy atrybuty trzeba przekopiować ręcznie.
* funkcje do obsługi słowników użytkownika. Osobiście, podczas pracy przy danych z badań klinicznych korzystam z typowego "CodeLst", wiec mam to zaszyte w kodzie. Pozycje do wybranego słownika można dodawać na wiele sposobów, m.in. podając kolejne pary atrybut-wartość, zbiór tych par w postaci literału, lub podając literał w formacie SAS.
Przykładowa sesja
Ponieważ GL nie radzi sobie z wyświetlaniem kodu pod różnymi przeglądarkami i pod Chromem wszystko jest pozawijane (horror), zrobiłem po prostu zrzuty ekranu z Firefoxa. Zawsze to coś
Ten post został edytowany przez Autora dnia 15.01.15 o godzinie 23:25