R Language
Zmienne
Szukaj…
Zmienne, struktury danych i podstawowe operacje
W R obiekty danych są manipulowane przy użyciu nazwanych struktur danych. Nazwy obiektów można nazwać „zmiennymi”, chociaż termin ten nie ma określonego znaczenia w oficjalnej dokumentacji R. W nazwach R rozróżniana jest wielkość liter i mogą one zawierać znaki alfanumeryczne ( az , Az , 0-9 ), kropkę / kropkę ( . ) I podkreślenie ( _ ). Aby utworzyć nazwy struktur danych, musimy przestrzegać następujących zasad:
Nazwiska zaczynające się od cyfry lub znaku podkreślenia (np
1a) lub nazwy, które są ważne wyrażenia liczbowe (np.11), albo imiona z myślnika ( „-”) lub pomieszczenia mogą być stosowane tylko wtedy, gdy są notowane:`1a`i`.11`. Nazwy zostaną wydrukowane za pomocą wstecznych:list( '.11' ="a") #$`.11` #[1] "a"Wszystkie inne kombinacje znaków alfanumerycznych, kropek i znaków podkreślenia mogą być używane dowolnie, gdy odniesienie z odwrotnymi znakami lub bez wskazuje na ten sam obiekt.
Nazwy, które zaczynają się od
.są uważane za nazwy systemowe i nie zawsze są widoczne za pomocą funkcjils().
Nie ma ograniczenia liczby znaków w nazwie zmiennej.
Niektóre przykłady poprawnych nazw obiektów są: foobar , foo.bar , foo_bar , .foobar
W R zmiennym przypisuje się wartości za pomocą operatora przypisania niewidzialności <- . Operator = może być również użyty do przypisania wartości do zmiennych, jednak jego właściwe użycie to skojarzenie wartości z nazwami parametrów w wywołaniach funkcji. Pamiętaj, że pominięcie spacji wokół operatorów może powodować zamieszanie dla użytkowników. Wyrażenie a<-1 jest analizowane jako przypisanie ( a <- 1 ), a nie jako logiczne porównanie ( a < -1 ).
> foo <- 42
> fooEquals = 43
Więc foo ma przypisaną wartość 42 . Wpisanie foo w konsoli wyświetli 42 , a wpisanie fooEquals spowoduje wyświetlenie 43 .
> foo
[1] 42
> fooEquals
[1] 43
Następujące polecenie przypisuje wartość do zmiennej o nazwie x i drukuje wartość jednocześnie:
> (x <- 5)
[1] 5
# actually two function calls: first one to `<-`; second one to the `()`-function
> is.function(`(`)
[1] TRUE # Often used in R help page examples for its side-effect of printing.
Możliwe jest również przypisywanie zmiennych za pomocą -> .
> 5 -> x
> x
[1] 5
>
Rodzaje struktur danych
W R. nie ma typów danych skalarnych. Wektory długości 1 działają jak skalary.
- Wektory: Wektory atomowe muszą być ciągiem obiektów tej samej klasy: sekwencją liczb, sekwencją logiki lub sekwencją znaków.
v <- c(2, 3, 7, 10),v2 <- c("a", "b", "c")są wektorami. - Macierze: Macierz liczb, logiczna lub znaków.
a <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow = 4, ncol = 3, byrow = F). Podobnie jak wektory, macierz musi być wykonana z elementów tej samej klasy. Aby wyodrębnić elementy z macierzy, należy podać wiersze i kolumny:a[1,2]zwraca[1] 5, czyli element z pierwszego wiersza, drugiej kolumny. - Listy: konkatenacja różnych elementów
mylist <- list (course = 'stat', date = '04/07/2009', num_isc = 7, num_cons = 6, num_mat = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), results = c(30, 19, 29, NA, 25, 26 ,27) ). Wyodrębnianie elementów z listy można wykonać według nazwy (jeśli lista ma nazwę) lub według indeksu. W podanym przykładziemylist$resultsimylist[[6]]uzyskują ten sam element. Ostrzeżenie: jeśli spróbujeszmylist[6], R nie da ci błędu, ale wyodrębni wynik jako listę. Chociaż lista odtwarzaniamylist[[6]][2]jest dozwolona (daje 19), lista odtwarzaniamylist[6][2]wyświetla błąd. - data.frame: obiekt z kolumnami, które są wektorami o równej długości, ale (prawdopodobnie) różnych typach. Nie są matrycami.
exam <- data.frame(matr = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), res_S = c(30, 19, 29, NA, 25, 26, 27), res_O = c(3, 3, 1, NA, 3, 2, NA), res_TOT = c(30,22,30,NA,28,28,27)). Kolumny można odczytać według nazwyexam$matr,exam[, 'matr']lub według indeksuexam[1],exam[,1]. Rzędy można również odczytać wedługexam['rowname', ]nazwyexam['rowname', ]lubexam[1,]indeksowegoexam[1,]. Ramki danych to tak naprawdę listy o określonej strukturze (komponenty rownames-atrybut i elementy o równej długości)
Typowe operacje i porady ostrzegawcze
Domyślne operacje wykonywane są element po elemencie. Zobacz ?Syntax reguł pierwszeństwa operatora. Większość operatorów (i może inne funkcje w bazie R) mają reguły recyklingu, które dopuszczają argumenty o nierównej długości. Biorąc pod uwagę te obiekty:
Przykładowe obiekty
> a <- 1
> b <- 2
> c <- c(2,3,4)
> d <- c(10,10,10)
> e <- c(1,2,3,4)
> f <- 1:6
> W <- cbind(1:4,5:8,9:12)
> Z <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1))
Niektóre operacje wektorowe
> a+b # scalar + scalar
[1] 3
> c+d # vector + vector
[1] 12 13 14
> a*b # scalar * scalar
[1] 2
> c*d # vector * vector (componentwise!)
[1] 20 30 40
> c+a # vector + scalar
[1] 3 4 5
> c^2 #
[1] 4 9 16
> exp(c)
[1] 7.389056 20.085537 54.598150
Niektóre operacje wektorowe Ostrzeżenia!
> c+e # warning but.. no errors, since recycling is assumed to be desired.
[1] 3 5 7 6
Warning message:
In c + e : longer object length is not a multiple of shorter object length
R sumuje, co może, a następnie ponownie wykorzystuje krótszy wektor do wypełnienia pustych pól ... Ostrzeżenie zostało wydane tylko dlatego, że dwa wektory mają długości, które nie są dokładnie wielokrotnościami. c + f # bez żadnego ostrzeżenia.
Niektóre operacje na macierzach Ostrzeżenie!
> Z+W # matrix + matrix #(componentwise)
> Z*W # matrix* matrix#(Standard product is always componentwise)
Aby użyć macierzy, należy pomnożyć: V% *% W
> W + a # matrix+ scalar is still componentwise
[,1] [,2] [,3]
[1,] 2 6 10
[2,] 3 7 11
[3,] 4 8 12
[4,] 5 9 13
> W + c # matrix + vector... : no warnings and R does the operation in a column-wise manner
[,1] [,2] [,3]
[1,] 3 8 13
[2,] 5 10 12
[3,] 7 9 14
[4,] 6 11 16
Zmienne „prywatne”
Kropka wiodąca w nazwie zmiennej lub funkcji w R jest powszechnie używana do oznaczenia, że zmienna lub funkcja ma być ukryta.
Deklarując następujące zmienne
> foo <- 'foo'
> .foo <- 'bar'
A następnie użycie funkcji ls do wyświetlenia obiektów pokaże tylko pierwszy obiekt.
> ls()
[1] "foo"
Jednak przekazanie all.names = TRUE do funkcji spowoduje wyświetlenie zmiennej „private”
> ls(all.names = TRUE)
[1] ".foo" "foo"