Матричная функция в R: создание, печать, добавление столбца и среза

⚡ Умное резюме

Матрица в R — это двумерный массив, содержащий данные одного типа, занимающий m строк и n столбцов. Он создается с помощью функции matrix(), расширяется с помощью функций cbind() и rbind() и доступен через квадратные скобки.

  • 🧩 Конструкция: Матрица — это вектор с атрибутом dim, поэтому каждая ячейка должна иметь один и тот же тип данных.
  • 🇧🇷 Создание: Функция matrix(data, nrow, ncol, byrow) упорядочивает последовательность, а R определяет недостающее измерение.
  • 🔄 Выполнить заказ: Параметр byrow = FALSE заполняет столбец за столбцом, а byrow = TRUE — строку за строкой.
  • Рост: Функция cbind() добавляет столбцы, а функция rbind() — строки, при условии совпадения общего измерения.
  • Нарезка: m[row, column] сначала считывает строки, а пустая сторона выделяет все элементы на этой стороне.
  • 🏷️ Ярлыки: Функции dimnames, rownames() и colnames() заменяют заполнители [,1] на читаемые имена.
  • ➕➖ Арифметика: Звездочка умножает элемент за элементом, тогда как %*% выполняет умножение матриц.

Функция создания матрицы в R: Создать, распечатать, добавить столбец и срез.

Матричная функция в R

Матричная функция в R — это двумерный массив, имеющий m строк и n столбцов. Другими словами, матрица в программировании на R — это комбинация двух или более векторов с одним и тем же типом данных.

По сути, матрица — это просто вектор, несущий атрибут dim длиной два. Именно поэтому каждый элемент должен иметь один и тот же тип: как только символьное значение присоединяется к числам, вся матрица преобразуется в символьный тип. R хранит значения в одном столбцовом блоке и использует dim для определения того, где заканчивается каждая строка, поэтому выбор тип данных Применяется ко всему объекту сразу.

Примечание: Функция matrix() всегда возвращает ровно два измерения. Чтобы создать структуру с тремя или более измерениями в R, используйте функцию array() с вектором измерений или присвойте значение переменной dim() напрямую. На диаграмме ниже показана структура строк и столбцов, которой следует каждая матрица.

Функция отображения строк и столбцов матрицы в R.

Как создать матрицу в R

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

matrix(data, nrow, ncol, byrow = FALSE)

Аргументы:

  • данным: Набор элементов, которые R расположит в строках и столбцах матрицы.
  • Nrow: Количество строк.
  • нкол: Количество столбцов.
  • пригород: Логический флаг. При значении по умолчанию byrow = FALSE матрица заполняется по столбцам, сверху вниз. При значении byrow = TRUE она заполняется по строкам, слева направо.
  • димнеймы: Необязательный список длиной два элемента, содержащий названия строк и столбцов.

Перед первым примером стоит знать две детали из базового справочника R. Если задано только одно из значений nrow и ncol, R определяет другое на основе длины данных. И если данных слишком мало для заполнения запрошенной вами формы, значения используются повторно, а не отклоняются.

Давайте построим две матрицы 5×2 из последовательности чисел от 1 до 10, одну с byrow = TRUE, а другую с byrow = FALSE, чтобы увидеть разницу.

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  TRUE 
matrix_a <-matrix(1:10, byrow = TRUE, nrow = 5)
matrix_a

Выход:

Поскольку было указано значение byrow = TRUE, консоль заполняет первую строку числами 1 и 2, вторую — 3 и 4 и так далее.

Вывод в консоль функции matrix_a, заполненной построчно с параметром byrow = TRUE

Теперь давайте напечатаем размерность матрицы в R с помощью dim(). Синтаксис печати матрицы в R с использованием dim():

# Print dimension of the matrix with dim()
dim(matrix_a)

Выход:

## [1] 5 2

Функция dim() сначала возвращает количество строк, а затем количество столбцов, подтверждая структуру 5×2.

Заполнить матрицу по столбцам, установив значение byrow равным FALSE.

Те же десять чисел и та же строка дают другое расположение при изменении направления заполнения.ping В настройках byrow по умолчанию значения сначала располагаются в первом столбце, а затем начинаются во втором.

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  FALSE
matrix_b <-matrix(1:10, byrow = FALSE, nrow = 5)
matrix_b

Выход:

Вывод в консоль функции matrix_b, заполненной столбцом по столбцу с параметром byrow = FALSE

Снова распечатайте размер матрицы, используя dim(). Ниже приведен синтаксис измерения матрицы печати R:

# Print dimension of the matrix with dim()
dim(matrix_b)

Выход:

## [1] 5 2

Форма остается неизменной при размере 5×2, поскольку байроул изменяет порядок заполнения, но никогда не меняет размеры.

ВниманиеИспользование команды matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) даст тот же эффект, что и выше, поскольку R определяет nrow = 5 на основе десяти предоставленных значений.

Также можно создать матрицу 4×3 с помощью функции ncol. R создаст 3 столбца и заполнит каждый столбец сверху вниз. Посмотрите пример.

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c

Выход:

##       [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

Заголовки столбцов [,1] до [,3] и метки строк [1,] до [4,] являются стандартными заполнителями R. Они исчезают, как только указываются реальные имена измерений, как показано далее в этом руководстве.

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

dim(matrix_c)

Выход:

## [1] 4 3

Добавьте столбец в матрицу с помощью cbind()

Добавить столбец в матрицу R можно с помощью команды cbind(). cbind() означает привязку столбцов и может объединять столько матриц или столбцов, сколько указано. Например, в нашем предыдущем примере была создана матрица 5×2. Мы добавляем третий столбец и проверяем, что размерность равна 5×3.

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

# concatenate c(1:5) to the matrix_a
matrix_a1 <- cbind(matrix_a, c(1:5))
# Check the dimension
dim(matrix_a1)

Выход:

## [1] 5 3

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

matrix_a1

Результат

##       [,1] [,2] [,3]
## [1,]    1    2    1
## [2,]    3    4    2
## [3,]    5    6    3
## [4,]    7    8    4
## [5,]    9   10    5

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

Мы также можем связывать более одного столбца одновременно. Следующий блок создает матрицу matrix_a2, матрицу 4×3, содержащую числа от 13 до 24, чтобы ее можно было соединить с матрицей matrix_c 4×3 и получить результат 4×6, охватывающий числа от 1 до 24.

matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)

Выход:

##      [,1] [,2] [,3]
## [1,]   13   17   21
## [2,]   14   18   22
## [3,]   15   19   23
## [4,]   16   20   24

Это критически важно для анализа и выбора наиболее эффективных ключевых слов для улучшения рейтинга вашего сайта.

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)		
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)

Выход:

## [1] 4 6

ЗАМЕТКАДля корректной работы функции cbind() количество строк матриц в R должно быть одинаковым. Если они различаются, R либо повторно использует более короткий входной массив, либо выдает ошибку, поэтому более безопасным вариантом является предварительная проверка размера (dim()) обоих объектов.

В то время как cbind() объединяет столбцы, rbind() добавляет строки. Давайте добавим одну строку к нашей матрице matrix_c и убедимся, что ее размерность составляет 5×3.

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
# Create a vector of 3 columns
add_row <- c(1:3)
# Append to the matrix
matrix_c <- rbind(matrix_c, add_row)
# Check the dimension
dim(matrix_c)

Выход:

## [1] 5 3

Обратите внимание, что привязка именованного вектора, например add_row, также присваивает новой строке это имя, что является первым шагом к созданию маркированных матриц, которые будут рассмотрены далее.

Разрезать матрицу

Мы можем выбрать один или несколько элементов из матрицы в R программирование с помощью квадратных скобок [ ]. Внутри скобок сначала указывается селектор строки, а затем селектор столбца, разделяемые запятой. Именно здесь вступает в игру срез.

Например:

  • матрица_c[1,2] выбирает элемент в первой строке и втором столбце.
  • Функция matrix_c[1:3,2:3] создает матрицу-срез R, в которой данные находятся в строках 1, 2, 3 и столбцах 2 и 3.
  • матрица_c[,1] выбирает все элементы первого столбца.
  • матрица_c[1,] выбирает все элементы первой строки.

Оставляя пустую сторону запятой, вы получаете все значения с этой стороны. Одно из последствий, которое может сбить с толку новичков: при выборе одной строки или столбца R удаляет пустое измерение и возвращает обычный вектор. Добавление drop = FALSE, как в matrix_c[1, , drop = FALSE], сохраняет результат в виде матрицы.

Вот результат, который вы получаете для приведенных выше кодов

Результаты работы четырех выражений для нарезки матриц в R, представленные в консоли.

Назовите строки и столбцы матрицы в R.

Метки по умолчанию, такие как [,1] и [3,], затрудняют чтение выходных данных, как только матрица приобретает реальный смысл. Аргумент dimnames, а также функции замены rownames() и colnames() добавляют текстовые метки, которые затем перемещаются вместе с матрицей через функции cbind(), t() и каждую операцию нарезки.

# Name the rows and columns while the matrix is built
sales <- matrix(1:6, nrow = 2, ncol = 3,
                dimnames = list(c('north', 'south'), c('q1', 'q2', 'q3')))

# Or attach the names afterwards
rownames(sales) <- c('north', 'south')
colnames(sales) <- c('q1', 'q2', 'q3')

# Read the names back as a list of two character vectors
dimnames(sales)

# Names make label based slicing possible
sales['north', 'q2']
Функция Читает Наборы
dimnames(m) Оба измерения представлены в виде списка из двух векторов. dimnames(m) <- list(rows, cols)
названия строк (m) Метки строк rownames(m) <- rows
colnames(m) Заголовки столбцов colnames(m) <- cols
dim(m) Строки и столбцы представлены двумя целыми числами. dim(m) <- c(nrow, ncol)

После того, как метки появились, sales['north', 'q2'] становится гораздо понятнее, чем sales[1, 2], и сохраняется при изменении порядка строк. Установка компонента dimnames в NULL снова удаляет этот набор меток, и матрица, преобразованная с помощью as.data.frame(), переносит имена строк и столбцов непосредственно в матрицу. фрейм данных.

матрица OperaФункции в R: арифметика, транспонирование и умножение.

Арифметические операции над матрицами — вот где правило единого типа действительно работает. Базовый R обрабатывает весь набор без дополнительного пакета, но два оператора легко спутать: * умножает элемент за элементом, в то время как %*% выполняет настоящее матричное умножение и требует, чтобы столбцы левого операнда совпадали со строками правого.

m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(5:8, nrow = 2)

m1 + m2          # element by element addition
m1 * m2          # element by element product, NOT matrix multiplication
m1 %*% m2        # true matrix multiplication
t(m1)            # transpose: rows become columns
solve(m1)        # inverse, for a square matrix that is not singular

rowSums(m1)      # one total per row
colMeans(m1)     # one mean per column
apply(m1, 1, max)   # any function, applied row by row
  • т(м): Транспонирует матрицу, так что элемент [i, j] становится [j, i]. Имена размерностей переносятся.
  • решить(m)Функция возвращает обратную матрицу для квадратной невырожденной матрицы, а solve(a, b) решает систему линейных уравнений.
  • rowSums / colSums / rowMeans / colMeansВ документации указано, что этот метод эквивалентен методу apply() с использованием сумм или среднего значения, но работает значительно быстрее.
  • apply(m, MARGIN, FUN): MARGIN = 1 обрабатывает строки, а MARGIN = 2 — столбцы, для любой заданной вами функции.
  • диаг, дет, кросспрод: Диагональ, определитель и более быстрая форма t(x) %*% y.

Поскольку эти операции векторизованы, они заменяют циклы, а не находятся внутри них. Сводка, которая в противном случае потребовала бы вложенного цикла for для обработки тысяч ячеек, превращается в один вызов функции colMeans(), что имеет значение по мере роста объема данных.

Матрица, фрейм данных и массив в R

Матрицы, фреймы данных и массивы в консоли выглядят как прямоугольные объекты, но отвечают на разные вопросы. В таблице они расположены рядом.

Свойства матрица Фрейм данных массив
Габаритные размеры: Ровно 2 Ровно 2 Любой номер
Типы столбцов Один тип для всего объекта Разный тип для каждого столбца Один тип для всего объекта
Построен с матрица () data.frame() Массив ()
Типичное использование Численные вычисления и линейная алгебра Смешанные данные наблюдений Таблицы с накоплением, например, с подсчетом по годам.
Метки строк Дополнительные имена измерений Названия строк всегда присутствуют. Дополнительные имена измерений
# A matrix holds one type only, so mixing coerces everything to character
mixed <- matrix(c(1, 2, 'a', 'b'), nrow = 2)
class(mixed[1, 1])

# Convert between the structures
as.data.frame(matrix_c)
as.matrix(mtcars)

# A matrix is the two dimensional case of an array
is.matrix(matrix_c)
inherits(matrix_c, 'array')

Обращайтесь к матрице, когда каждая ячейка содержит одно и то же число, и работа сводится к арифметическим операциям. Обращайтесь к фрейм данных когда столбцы содержат разные типы данных, например, символьное имя рядом с числовой ценой и факторПотянитесь за список Когда части имеют разную длину, и для массива, когда действительно существует третий индекс, например, время или регион. Преобразование в любом направлении выполняется недорого с помощью as.matrix() и as.data.frame(), поэтому структура может следовать за задачей, а не наоборот.

Часто задаваемые вопросы (FAQ)

В R значения используются повторно, а не отклоняются, поэтому функция matrix(1:3, nrow = 2, ncol = 3) повторяет последовательность. Предупреждение появляется только тогда, когда длина не является точным кратным количеству ячеек, что делает скрытое повторное использование легко пропущенной ошибкой.

Используйте отрицательный индекс: m[-2, ] удаляет вторую строку, а m[, -3] удаляет третий столбец. Можно удалить несколько элементов одновременно с помощью m[-c(1, 4), ]. Исходный объект остается неизменным до тех пор, пока вы не присвоите результат.

При выборе одной строки или столбца пустое измерение по умолчанию удаляется. Добавьте drop = FALSE, например, m[1, , drop = FALSE], чтобы сохранить матрицу с одной строкой. Это важно, когда результат передается функции, которая ожидает два измерения.

Функция which(m == value, arr.ind = TRUE) возвращает результат в два столбца, указывая строку и столбец каждого совпадения. Без arr.ind ответ представляет собой один линейный индекс, отсчитываемый по столбцам, что редко бывает необходимо.

Используйте array(data, dim = c(rows, columns, layers)) или присвойте dim(x) непосредственно вектору. В этом случае для нарезки используется один индекс на каждое измерение, например, a[2, 3, 1]. Матрица — это просто двумерный случай массива.

Да. В базовом справочнике R указано, что функции rowSums и colMeans эквивалентны функциям apply() с sum или mean, но работают намного быстрее, и обе превосходят явный цикл for, поскольку итерация происходит в скомпилированном коде, а не в интерпретаторе.

Подгонка модели — это линейная алгебра: признаки образуют матрицу, коэффициенты — вектор, а предсказание — это единое произведение %*%. Много машинного обучения или Поэтому для работы пакетов требуется в качестве входных данных числовая матрица, а не таблица данных.

Да. Второй пилот GitHub Запускается в RStudio 2023.09.0 и более поздних версиях и дополняет код комментариями в открытом файле. Проверьте логику его размерности в RStudio, потому что неправильная строка всё равно создаёт корректную матрицу.

Подведем итог этой публикации следующим образом: