Создаём пустые переменные
При работе с циклами часто бывает необходимо заранее создать результирующую переменную, в которую будут записываться результаты работы цикла. При этом циклы могут работать со всеми основными типами объектов в R: векторами, матрицами, списками или таблицами данных. При этом каждый объект может содежрать в себе различные классы: целые числа, строки символов, логические векторы и т.д.
В этом посте мы рассмотрим способы создания пустых переменных заданного типа и размерности.
Векторы
integer(n) |
создаёт объект типа integer (число с фиксированной запятой) длинной n . |
numeric(n) |
создаёт объект типа double (число с плавающей запятой) длинной n . |
double(n) |
создаёт объект типа double (число с плавающей запятой) длинной n (число двойной точности). |
single(n) |
создаёт объект типа double (число с плавающей запятой) длинной n (число одинарной точности). |
complex(n) |
создаёт объект типа complex (комплексный тип данных) длинной n . |
character(n) |
создаёт объект типа character (строковый тип данных) длинной n . |
logical(n) |
создаёт объект типа logical (логический тип данных) длинной n . |
Создание любого типа вектора можно также осуществить с помощью функции vector()
. Данная функция принимает два аргумента: mode
, указывающая тип данных и length
, указывающая длину вектора. Например, создание вектора целых чисел, длиной 100 можно создать с помощью следующих команд:
x <- integer(100)
x <- vector(mode = "integer", length = 100)
Ещё один способ создания вектора — это функция rep()
. Вот как будет выглядеть создание вектора с помощью этой функции:
x <- rep(NA, 100)
Обратите внимане, что пропущенные значения могут быть разных типов, поэтому, чтобы получить вектор желаемого типа, вам нужно указать тип NA
. Примеры:
class(rep(NA, 10))
#> [1] "logical"
class(rep(NA_real_, 10))
#> [1] "numeric"
class(rep(NA_integer_, 10))
#> [1] "integer"
class(rep(NA_character_, 10))
#> [1] "character"
Списки
Списки можно создавать с помощью уже рассмотренной ранее функции vector()
:
l <- vector(mode = "list", length = 10)
Матрицы
Матрицы создаются с помощью соответствующей функции matrix()
. Для создания матрицы необходимого размера, нам нужно указать количество строк и столбцов. Пример создания матрицы:
m <- matrix(NA, nrow = 100, ncol = 10)
Поскольку матрица является также массивом, то матрицу можно также создать с помощью функции array()
. Например:
m <- array(NA, dim = c(100, 10))
Переменные, полученные с помощью функций matrix()
и array()
будут идентичными. Убедиться в этом можно с помощью функции identical()
:
identical(matrix(NA, nrow = 100, ncol = 10),
array(NA, dim = c(100, 10)))
#> [1] TRUE
Матрицы и массивы можно также получить путём преобразования векторов или списков. Для этого необходимо изменить атрибут объекта, в котом хранится информация о размерности объекта. Получить информацию о размерности объекта можно с помощью функции dim()
. Данная функция также позволяет изменять размерность объекта. Приведём примеры:
m <- array(NA, dim = c(3, 2)) # создаём двухмерный массив с 3 строками и 2 столбцами
m
#> [,1] [,2]
#> [1,] NA NA
#> [2,] NA NA
#> [3,] NA NA
dim(m)
#> [1] 3 2
dim(m) <- c(2, 3) # изменяем количество строк и столбцов
m
#> [,1] [,2] [,3]
#> [1,] NA NA NA
#> [2,] NA NA NA
dim(m)
#> [1] 2 3
Теперь мы можем преобразовать вектор в матрицы путём присвоения вектору нужной нам размерности:
m <- rep(NA, 1000)
dim(m) <- c(100, 10)
Обратим внимание на то, что количество элементов в векторе и массиве должно быть одинаковым, в противном случае R выдаст ошибку. Результат данного преобразования будут также идентичен предыдущим примерам:
m1 <- matrix(NA, nrow = 100, ncol = 10)
m2 <- rep(NA, 1000)
dim(m2) <- c(100, 10)
identical(m1, m2)
#> [1] TRUE
Таблицы данных
Таблицы данных (data.frame
) могут могу быть созданы путём объединения векторов, содержащих требуемые типы данных:
d <- data.frame(A = integer(100),
B = character(100),
C = double(100),
D = double(100),
E = integer(100),
stringsAsFactors = FALSE)