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



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