Поиск…


Вступление

Класс объекта данных определяет, какие функции будут обрабатывать его содержимое. class атрибут является символьным вектором, а объекты могут иметь нуль, один или несколько классов. Если атрибута класса нет, все равно будет неявный класс, определяемый mode объекта. Класс может быть проверен с помощью class функций, и его можно установить или изменить с помощью class<- function. Система классов S3 была создана в начале истории S. Более сложная система класса S4 была установлена ​​позже

замечания

Существует несколько функций для проверки «типа» объекта. Наиболее полезной такой функцией является class , хотя иногда необходимо изучить mode объекта. Поскольку мы обсуждаем «типы», можно подумать, что typeof будет полезен, но в целом результат из mode будет более полезен, потому что объекты, у которых нет явного атрибута «class», будут иметь функцию диспетчеризации, определяемую определяемым «неявным классом» по их режиму.

векторы

Самая простая структура данных, доступная в R, является вектором. Вы можете создавать векторы числовых значений, логических значений и символьных строк с помощью функции c() . Например:

c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1]  TRUE  TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"

Вы также можете присоединиться к векторам, используя функцию c() .

x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6

Более подробное описание того, как создавать векторы, можно найти в теме «Создание векторов»

Осмотреть классы

Каждому объекту в R присваивается класс. Вы можете использовать class() чтобы найти класс объекта и str() чтобы увидеть его структуру, включая классы, которые она содержит. Например:

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"

Мы видим, что iris имеет класс data.frame и использование str() позволяет нам исследовать данные внутри. Переменная Species в кадре данных радужки имеет фактор класса, в отличие от других переменных, которые относятся к классу числовых. Функция str() также предоставляет длину переменных и показывает первую пару наблюдений, а функция class() предоставляет только класс объекта.

Векторы и списки

Данные в R хранятся в векторах. Типичным вектором является последовательность значений, все из которых имеют один и тот же режим хранения (например, векторы символов, числовые векторы). См. « ?atomic для получения подробных сведений о атомных неявных классах и их соответствующих режимах хранения: "logical", "integer", "numeric" (synonym "double"), "complex", "character" и "raw" . Многие классы - это просто атомный вектор с атрибутом class сверху:

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"

Списки представляют собой особый тип вектора, в котором каждый элемент может быть любым, даже другим списком, поэтому термин R для списков: «рекурсивные векторы»:

mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )

Списки имеют два очень важных применения:

  • Поскольку функции могут возвращать только одно значение, обычно возвращать сложные результаты в список:

    f <- function(x) list(xplus = x + 10, xsq = x^2)
    
    f(7)
    # $xplus
    # [1] 17
    # 
    # $xsq
    # [1] 49
    
  • Списки также являются базовым классом для фреймов данных . Под капотом кадр данных представляет собой список векторов, имеющих всю длину:

    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
    

Другим классом рекурсивных векторов являются R-выражения, которые являются «языковыми» объектами



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow