pazuRrry
SM
Opcrncjv w;;.s< m/» y)M m (zapisywanie i odczytywanie danych)
89
Operacje wejścia/wyjścia (zapisywanie i odczytywanie danych)
Aby wykonać jakąkolwiek analizę danych musimy najpierw wczytać dane do analiz Podobnie, mając już wyniki analiz, chcielibyśmy móc je zapisać. Na szczęście, Zarówno wczytywanie jak i zapisywanie danych nie jest problemem w R. Możemy ityobodnie zapisywać i odczytywać dane z plików tekstowych, plików w innych formatach, schowka systemowego, baz danych itp.
Bardzo szczegółowy i bardzo dobry opis importowania danych z i eksportowania do R można znaleźć pod adresem [14]. W tym dokumencie • znajduje się wiele ciekawych informacji, o których tu nawet nie wspominamy, np. jak korzystać ze spakowanych zbiorów danych, jak łączyć się z bazami danych, z innymi (rakietami statystycznymi, z innymi językami oprogramowania itp.
2.3.1
Na koniec jeszcze jeden przykład leniwej ewaluacji. W tym przykładzie my leniwego wartościowania do podania jako wartość domyślna wyrażenia, wyznaczane będzie dopiero wewnątrz funkcji.
> # w poniższej deklaracji funkcji argument y za wartość domyślną
przyjmuje wyrażenie, które jest Określone dopiero wewnątrz ciała funkcji. Gdyby wartościowanie było gorliwe, zwrócony byłby błąd dotyczący nieokreślonej wartości z
> wypiszKwadraty <- function(x, y » z"2) {
+ tt dopiero tutaj pojawia sią zmienna z + z <- l:x
+ ft wartość y jest wyznaczana dopiero w tym miejscu, a w tym miejscu wiadomo czym jest z + print(y)
+ 1 ' * v
> * podajemy tylko pierwszy argument
> wypiszKwadraty(6)
[1] 1 4 9 16 25 36
> tf podając drugi argument, rezygnujemy z automatycznego wyznaczania
wartości y
> wypiszK*fadraty(6, 1:5)
[13 1 2 3 4 5
> # w ten sposób nie możemy wywoływać funkcji, ponieważ zmienna z w tym
wywołaniu jest w innej przestrzeni nazw niż zmienna z wewnątrz fu\ wypiszKwadraty
> wypiszKvadraty(6, z~3)
Error in prlnt(y) : object "z" not found
R może być uruchomiony w trybie interaktywnym albo trybie wsadowym. R w trybie interaktywnym z graficznym interfejsem użytkownika można uruchomić plikiem;)®: Rgui.exe (w systemie Windows). Można też uruchomić R w trybie tekstowym Urli^S chamiejąc plik R.exe.
W pewnych sytuacjach (np. przy wykonywaniu czasochłonnych symulacji) nie en potrzebujemy interakcji z R. W takim przypadku możemy uruchomić plik Rterm. exe (lub też R.exe) z parametrem —vanilla wskazując plik, w którym znajduje się lista }§ poleceń do wykonania oraz wskazując plik gdzie mają być zapisane wyniki. Parametr vanilla powoduje, że R po zakończeniu pracy nic pyta się, czy zapamiętać historię^® poleceń oraz przestrzeń roboczą.
Przykładowe uruchomienie w tym trybie wyglądać może następująco: 1*™
Rterm —vanilla <plik.wejściowy.R >plik.wynikowy.txt
Po wykonaniu poleceń z pliku wejściowego środowisko R zastanie wyłączotię c S' a przestrzeń robocza nie będzie zapisana. Należy pamiętać, aby w wykonywanylii skrypcie ręcznie zapisać otrzymane wyniki, np. funkcją save. image(). O funkcjach do zapisu wyników w plikach tekstowych przeczytać można w rozdziale 2.3.
:
Podstawowe funkcje do operacji no plikach i katalogach zostały już przedstawione. w podrozdziale 1.6.5.1. Między innymi przedstawiliśmy tam przykłady prostego użycia funkcji write.table(utils) i read.table(utils). Obie te funkcje mają znaczną liczbę dodatkowych argumentów. O tych argumentach i o innych funkcjach do odczytu danych napiszemy poniżej.
23.1.1 read.table(utils)
już się przekonaliśmy funkcja read.tableO wczytuje dane o strukturze ramki danych. Kolumny tej ramki odpowiadają kolejnym zmiennym a wiersze kolejnym acjom (przypadkom). Wartości w wierszach tej samej kolumny powinny być samego typu, ale typy w różnych kolumnach mogą się od siebie różnić. Deklaracja funkcji read.tableO jest następująca:
read.table(file, header=FALSE, sep="", quote="\"’", dec-".", row.names, col.names, as.is=!stringsAsFactors, na.strings="NA", colClasses=NA, nrovs=-l, skip=0, check.names=TRUE, fill=!blank.lines.skip, strip.white=FALSE, blank. lines. skip=TRUE, comment. char="#'', allowEscapes=FALSE, flush=FALSE, stringsAsFactors, encoding = "unknown")
■: W pakiecie utils znajdują się również cztery inne funkcje o takim samym działaniu. ale innej parametryzacji argumentów domyślnych.
read.csv(file, header=TRUE, sep=",", quote-"\"", dec-".", fill=TRUE, comment.char-"", ...)
read.csv2(file, header=TRUE, sep-";", quote-"V"\ dec-",", fill=TRUE, comment.char-"", ...)
read.delim(file, header-TRUE, sep="\t", quote-"V"', dec-".", fill=TRUE, comment.char="", ...)
read.delim2(file, header=TRUE, sep-"\t", quote-"V". dec-",", fill-TRUE, comment.char-"", ...)