English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Тип данных - это обширная система, используемая для объявления различных типов переменных или функций.
Тип переменной определяет объем памяти, занимаемый переменной, и то, как интерпретировать хранимый битовый шаблон.
Наиболее основными типами данных в Р-языке主要有 три:
Числовые
Логический
Текст
Основные типы числовых констант主要有 два:
Обычный тип | 123 -0.125 |
---|---|
Научная запись | 1.23e2 -1.25E-1 |
Логический тип в многих других языках программирования часто называется типом Boolean, значения констант только TRUE и FALSE.
Внимание:Р-язык различает регистр, true или True не может быть заменено TRUE.
Наиболее直观ым типом данных является текстовый тип. Текст, как правило, встречается в других языках программирования в виде строки (String), константы заключены в двойные кавычки. В Р-языке текстовые константы могут быть заключены в одиночные или двойные кавычки, например:
> 'w3codebox' == "w3codebox" [1] TRUE
Определение переменных в Р-языке не похоже на синтаксис некоторых языков с сильным типом, где необходимо专门 устанавливать имя и тип данных для переменных, при каждом использовании оператора присваивания в Р на самом деле определяется новый переменная:
a = 1 b <- TRUE b = "abc"
По типу объекта они делятся на следующие 6 видов (они будут подробно рассмотрены позже):
Вектор (Vector) в стандарных библиотеках языков программирования, таких как Java, Rust, C#, часто предоставляется, потому что вектор является незаменимым инструментом для математических вычислений - наиболее часто используемый вектор - это двумерный вектор, который必然会 использоваться в плоской координатной системе.
С точки зрения данных, вектор представляет собой линейный список, который можно рассматривать как массив.
В Р-языке вектор как тип существует, что упрощает операции с векторами:
> a = c(3, 4) > b = c(5, 0) > a + b [1] 8 4 >
Функция c() - это функция создания векторов.
Здесь к двум двумерным векторам добавляют, чтобы получить новый двумерный вектор (8, 4). Если выполнить операцию с двумерным вектором и трехмерным вектором, теряется математический смысл, хотя программа продолжит работать, но будет выведено предупреждение.
Я рекомендую избегать такой ситуации по привычке.
Каждый элемент вектора можно извлечь по индексу отдельно:
> a = c(10, 20, 30, 40, 50) > a[2] [1] 20
Внимание:Я рекомендую избегать такой ситуации по привычке.
R также может легко извлекать часть вектора:
> a[1:4] # Извлечь 1-е до 4-го элементов, включая 1-й и 4-й элементы [1] 10 20 30 40 > a[c(1, 3, 5)] # Извлечь 1-е, 3-е и 5-е элементы [1] 10 30 50 > a[c(-1, -5)] # Удалить 1-е и 5-е элементы [1] 20 30 40
Эти три метода извлечения частей вектора являются наиболее часто используемыми.
Вектор поддерживает скалярные вычисления:
> c(1.1, 1.2, 1.3) - 0.5 [1] 0.6 0.7 0.8 > a = c(1, 2) > a ^ 2 [1] 1 4
Ранее рассмотренные常用ные математические операционные функции, такие как sqrt, exp и т.д., также могут использоваться для скалярных операций над векторами.
"Вектор" как линейная структура данных должен обладать некоторыми常用ными функциями обработки линейных структур данных, и R действительно обладает этими функциями:
Сортировка вектора:
> a = c(1, 3, 5, 2, 4, 6) > sort(a) [1] 1 2 3 4 5 6 > rev(a) [1] 6 4 2 5 3 1 > order(a) [1] 1 4 2 5 3 6 > a[order(a)] [1] 1 2 3 4 5 6
Функция order() возвращает индексный вектор после сортировки вектора.
Статистика вектора
В R есть очень полные статистические функции:
Имя функции | Значение |
---|---|
sum | Сумма |
mean | Среднее арифметическое |
var | Вariance |
sd | Среднеквадратичное отклонение |
min | Минимальное значение |
max | Максимальное значение |
range | Интервал значений (двумерный вектор, максимальное и минимальное значения) |
Пример статистики вектора:
> sum(1:5) [1] 15 > sd(1:5) [1] 1.581139 > range(1:5) [1] 1 5
Генерация вектора
Генерация вектора может быть выполнена с помощью c() Функция генерации, а также можно использовать оператор min:max для генерации последовательности.
Если нужно генерировать арифметическую прогрессию с интервалом, можно использовать seq Функция:
> seq(1, 9, 2) [1] 1 3 5 7 9
seq может генерировать арифметическую прогрессию от m до n, нужно только указать m, n и длину последовательности:
> seq(0, 1, length.out=3) [1] 0.0 0.5 1.0
Rep означает repeat (повторять), и может использоваться для создания последовательности чисел, повторяющихся несколько раз:
> rep(0, 5) [1] 0 0 0 0 0
В векторе часто используются NA и NULL, здесь мы расскажем о этих двух словах и их различиях:
NA означает "пропущенный", NULL означает "отсутствующий".
NA пропущенный, как占емник, означает, что здесь нет значения, но положение существует.
NULL означает, что данные отсутствуют.
Пример объяснения:
> length(c(NA, NA, NULL)) [1] 2 > c(NA, NA, NULL, NA) [1] NA NA NA
Очевидно, NULL в векторе не имеет никакого значения.
Логические векторы主要用于 логические операции с векторами, например:
> c(1, 2, 3) > 2 [1] FALSE FALSE TRUE
Функция which является одной из самых распространенных функций обработки логических векторов, и она может использоваться для выбора индексов необходимых данных:
> a = c(1, 2, 3) > b = a > 2 > print(b) [1] FALSE FALSE TRUE > which(b) > m1[1,3] # Строка 1, столбец 3
Например, нам нужно отфильтровать данные из линейного списка, которые больше или равны 60 и меньше 70:
> vector = c(10, 40, 78, 64, 53, 62, 69, 70) > print(vector[which(vector >= 60 & vector < 70)]) [1] 64 62 69
Похожие функции также include all и any:
> all(c(TRUE, TRUE, TRUE)) [1] TRUE > all(c(TRUE, TRUE, FALSE)) [1] FALSE > any(c(TRUE, FALSE, FALSE)) [1] TRUE > any(c(FALSE, FALSE, FALSE)) [1] FALSE
all() используется для проверки, является ли логический вектор полностью TRUE, any() используется для проверки наличия TRUE в логическом векторе.
Строка данных herself не слишком сложна, здесь мы着重介绍 функции операций со строками:
toupper("w3codebox") # 转换为大写 [1] "w3codebox" tolower("w3codebox") # 转换为小写 [1] "w3codebox" nchar("中文", type="bytes") # 统计字节长度 [1] 4 nchar("中文", type="char") # Общее количество символов [1] 2 substr("123456789", 1, 5) # Вырезать строку, начиная с 1 до 5 [1] "12345" substring("1234567890", 5) # Вырезать строку, начиная с 5 до конца [1] "567890" as.numeric("12") # Преобразовать строку в число [1] 12 as.character(12.34) # Преобразовать число в строку [1] "12.34" strsplit("2019;10;1", ";") # Разделить строку по разделителю [[1]] [1] "2019" "10" "1" gsub("/", "-", "2019/10/1") # Заменить строку [1] "2019-10-1"
На компьютерах с Windows используется стандарт кодировки GBK, поэтому один китайский символ занимает два байта, если программа запущена на компьютере с кодировкой UTF-8, длина одного китайского символа должна быть 3 байта.
Язык R поддерживает регулярные выражения в формате perl:
gsub("[[:alpha:]]+", "$", "Two words") [1] "$ $"
Более подробную информацию о строках см. здесь:Введение в строковые функции языка R.
Язык R предоставляет тип матрицы для исследования линейной алгебры, которая очень похожа на двумерные массивы других языков, но R предоставляет поддержку для матричных операций на уровне языка.
Наблюдаем создание матрицы:
vector=c(1, 2, 3, 4, 5, 6) matrix(vector, 2, 3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
Содержимое инициализации матрицы передается через вектор, а также указывается, сколько строк и столбцов у матрицы.
Значения вектора заполняют матрицу столбцами. Если нужно заполнить по строкам, нужно указать атрибут byrow:
matrix(vector, 2, 3, byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
В каждой ячейке матрицы можно напрямую получить значение:
m1 = matrix(vector, 2, 3, byrow=TRUE) > m1[1,1] # 第 1 行 第 1 列 > m1[1,1] # Строка 1, столбец 1 [1] 1 > m1[1,3] # Строка 1, столбец 3
[1] 3
> R中的矩阵 каждая строка и каждый столбец могут быть названы, этот процесс выполняется через вектор строк в массовом порядке: > colnames(m1) = c("x", "y", "z") > rownames(m1) = c("a", "b") > m1["a", ] > m1 a 1 2 3 b 4 5 6 > m1["a", ] x y z
1 2 3
Вычисления матричных операций аналогичны вычислениям векторных, они могут выполняться как с скалярами, так и с матрицами того же размера, выполняя операции по соответствующим位置的 элементов.
> m1 = matrix(c(1, 2), 1, 2) > m2 = matrix(c(3, 4), 2, 1) > m1 %*% m2 [,1] [1,] 11
Обратная матрица:
> A = matrix(c(1, 3, 2, 4), 2, 2) > solve(A) [,1] [,2] [1,] -2.0 1.0 [2,] 1.5 -0.5
Функция apply() может использовать каждую строку или каждый столбец матрицы как вектор для выполнения операций:
> (A = matrix(c(1, 3, 2, 4), 2, 2)) [,1] [,2] [1,] 1 2 [2,] 3 4 > apply(A, 1, sum) # Второй параметр равен 1 операции по строкам, с использованием функции sum() [1] 3 7 > apply(A, 2, sum) # Второй параметр равен 2 операции по столбцам [1] 4 6
Более подробную информацию о матрицах см.:Матрицы в R.