R Language
Klasy
Szukaj…
Wprowadzenie
Klasa obiektu danych określa, które funkcje przetwarzają jego zawartość. Atrybut class
jest wektorem znaków, a obiekty mogą mieć zero, jedną lub więcej klas. Jeśli nie ma atrybutu klasy, nadal będzie istniała klasa niejawna określona przez mode
obiektu. Klasę można sprawdzić za pomocą class
funkcji, a class<-
można ustawić lub zmodyfikować. System klasy S3 został ustanowiony na początku historii S. Bardziej złożony system klasy S4 powstał później
Uwagi
Istnieje kilka funkcji kontrolujących „typ” obiektu. Najbardziej użyteczną taką funkcją jest class
, choć czasem konieczne jest sprawdzenie mode
obiektu. Ponieważ dyskutujemy o „typach”, można by pomyśleć, że typeof
byłby użyteczny, ale generalnie wynik z mode
będzie bardziej użyteczny, ponieważ obiekty bez wyraźnego atrybutu „klasy” będą miały przypisanie funkcji określone przez „klasę niejawną” według ich trybu.
Wektory
Najprostszą dostępną strukturą danych w R jest wektor. Za pomocą funkcji c()
można tworzyć wektory wartości liczbowych, wartości logicznych i ciągów znaków. Na przykład:
c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1] TRUE TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"
Możesz także łączyć się z wektorami za pomocą funkcji c()
.
x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6
Bardziej skomplikowane podejście do tworzenia wektorów można znaleźć w temacie „Tworzenie wektorów”
Sprawdź klasy
Każdy obiekt w R ma przypisaną klasę. Możesz użyć class()
aby znaleźć klasę obiektu i str()
aby zobaczyć jego strukturę, w tym zawarte w niej klasy. Na przykład:
class(iris)
[1] "data.frame"
str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 ...
class(iris$Species)
[1] "factor"
Widzimy, że iris ma klasę data.frame
a użycie str()
pozwala nam zbadać dane w środku. Zmienna Gatunki w ramce tęczówki ma współczynnik klasy, w przeciwieństwie do innych zmiennych, które są klasami liczbowymi. Funkcja str()
podaje również długość zmiennych i pokazuje pierwszą parę obserwacji, podczas gdy funkcja class()
podaje tylko klasę obiektu.
Wektory i listy
Dane w R są przechowywane w wektorach. Typowy wektor to sekwencja wartości, z których wszystkie mają ten sam tryb przechowywania (np. Wektory znaków, wektory numeryczne). Zobacz ?atomic
aby uzyskać szczegółowe informacje na temat atomowych klas niejawnych i odpowiadających im trybów przechowywania: "logical", "integer", "numeric" (synonym "double"), "complex", "character"
i "raw"
. Wiele klas to po prostu wektor atomowy z atrybutem class
u góry:
x <- 1826
class(x) <- "Date"
x
# [1] "1975-01-01"
x <- as.Date("1970-01-01")
class(x)
#[1] "Date"
is(x,"Date")
#[1] TRUE
is(x,"integer")
#[1] FALSE
is(x,"numeric")
#[1] FALSE
mode(x)
#[1] "numeric"
Listy są specjalnym rodzajem wektora, w którym każdy element może być czymkolwiek, nawet inną listą, stąd termin R dla list: „wektory rekurencyjne”:
mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )
Listy mają dwa bardzo ważne zastosowania:
Ponieważ funkcje mogą zwracać tylko jedną wartość, często zwracane są skomplikowane wyniki na liście:
f <- function(x) list(xplus = x + 10, xsq = x^2) f(7) # $xplus # [1] 17 # # $xsq # [1] 49
Listy są również podstawową klasą podstawową dla ramek danych . Pod maską ramka danych to lista wektorów o tej samej długości:
L <- list(x = 1:2, y = c("A","B")) DF <- data.frame(L) DF # x y # 1 1 A # 2 2 B is.list(DF) # [1] TRUE
Drugą klasą wektorów rekurencyjnych są wyrażenia R, które są „językami” - obiektami