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ą funkcji ls() .

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ładzie mylist$results i mylist[[6]] uzyskują ten sam element. Ostrzeżenie: jeśli spróbujesz mylist[6] , R nie da ci błędu, ale wyodrębni wynik jako listę. Chociaż lista odtwarzania mylist[[6]][2] jest dozwolona (daje 19), lista odtwarzania mylist[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 nazwy exam$matr , exam[, 'matr'] lub według indeksu exam[1] , exam[,1] . Rzędy można również odczytać według exam['rowname', ] nazwy exam['rowname', ] lub exam[1,] indeksowego exam[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"   


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow