R Language
переменные
Поиск…
Переменные, структуры данных и основные операции
В R объекты данных обрабатываются с использованием именованных структур данных. Имена объектов можно назвать «переменными», хотя этот термин не имеет определенного значения в официальной документации R. Названия R чувствительны к регистру и могут содержать буквенно-цифровые символы ( az , Az , 0-9 ), точку / период ( . ) И подчеркивание ( _ ). Чтобы создать имена для структур данных, мы должны следовать следующим правилам:
Имена, начинающиеся с цифры или символа подчеркивания (например,
1a) или имен, которые являются действительными численными выражениями (например,.11), или имена с тире ('-') или пробелы могут использоваться только при их цитировании:`1a`и`.11`. Имена будут напечатаны с обратными окнами:list( '.11' ="a") #$`.11` #[1] "a"Все другие комбинации буквенно-цифровых символов, точек и подчеркивания могут использоваться свободно, где ссылка с обратными тактами или без них указывает на один и тот же объект.
Имена, которые начинаются с
.считаются именами систем и не всегда отображаются с помощью функцииls().
Нет ограничений на количество символов в имени переменной.
Некоторые примеры допустимых имен объектов являются: foobar , foo.bar , foo_bar , .foobar
В R переменным присваиваются значения с помощью оператора infix-присваивания <- . Оператор = также может использоваться для назначения значений переменным, однако его правильное использование - это сопоставление значений с именами параметров в вызовах функций. Обратите внимание, что исключение пробелов вокруг операторов может создать путаницу для пользователей. Выражение a<-1 анализируется как назначение ( a <- 1 ), а не как логическое сравнение ( a < -1 ).
> foo <- 42
> fooEquals = 43
Поэтому foo присваивается значение 42 . Набрав foo в консоли, fooEquals 42 , а при вводе fooEquals будет выводиться 43 .
> foo
[1] 42
> fooEquals
[1] 43
Следующая команда присваивает значение переменной x и печатает значение одновременно:
> (x <- 5)
[1] 5
# actually two function calls: first one to `<-`; second one to the `()`-function
> is.function(`(`)
[1] TRUE # Often used in R help page examples for its side-effect of printing.
Также возможно назначать переменные с помощью -> .
> 5 -> x
> x
[1] 5
>
Типы структур данных
Не существует скалярных типов данных в R. Векторы длины-один действуют подобно скалярам.
- Векторы: Атомные векторы должны быть последовательностью объектов одного класса: последовательность чисел или последовательность логических последовательностей или последовательность символов.
v <- c(2, 3, 7, 10),v2 <- c("a", "b", "c")- оба вектора. - Матрицы: матрица чисел, логическая или символьная.
a <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow = 4, ncol = 3, byrow = F). Подобно векторам, матрица должна быть сделана из элементов одного класса. Для извлечения элементов из матрицы должны быть указаны строки и столбцы:a[1,2]возвращает[1] 5который является элементом в первой строке, второй столбец. - Списки: объединение разных элементов
mylist <- list (course = 'stat', date = '04/07/2009', num_isc = 7, num_cons = 6, num_mat = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), results = c(30, 19, 29, NA, 25, 26 ,27) ). Извлечение элементов из списка может быть выполнено по имени (если список указан) или по индексу. В данном примереmylist$resultsиmylist[[6]]получает тот же самый элемент. Предупреждение: если вы попробуетеmylist[6], R не даст вам ошибку, но извлечет результат в виде списка. Хотяmylist[[6]][2]разрешен (он дает вам 19),mylist[6][2]дает вам ошибку. - data.frame: объект с столбцами, которые являются векторами равной длины, но (возможно) разными типами. Они не являются матрицами.
exam <- data.frame(matr = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), res_S = c(30, 19, 29, NA, 25, 26, 27), res_O = c(3, 3, 1, NA, 3, 2, NA), res_TOT = c(30,22,30,NA,28,28,27)). Столбцы могут быть прочитаны по имениexam$matr,exam[, 'matr']или по индексномуexam[1],exam[,1]. Строки также можно читать поexam['rowname', ]по имениexam['rowname', ]или индексномуexam[1,]. Dataframes на самом деле представляют собой только списки с определенной структурой (атрибуты rownames-attribute и равные длины)
Общие операции и некоторые предостерегающие советы
Операции по умолчанию выполняются по элементам. См. ?Syntax для правил приоритета оператора. Большинство операторов (и могут выполнять другие функции в базе R) имеют правила утилизации, которые допускают аргументы неравной длины. Учитывая эти объекты:
Примеры объектов
> a <- 1
> b <- 2
> c <- c(2,3,4)
> d <- c(10,10,10)
> e <- c(1,2,3,4)
> f <- 1:6
> W <- cbind(1:4,5:8,9:12)
> Z <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1))
Некоторые векторные операции
> a+b # scalar + scalar
[1] 3
> c+d # vector + vector
[1] 12 13 14
> a*b # scalar * scalar
[1] 2
> c*d # vector * vector (componentwise!)
[1] 20 30 40
> c+a # vector + scalar
[1] 3 4 5
> c^2 #
[1] 4 9 16
> exp(c)
[1] 7.389056 20.085537 54.598150
Некоторые предупреждения о работе в векторе!
> c+e # warning but.. no errors, since recycling is assumed to be desired.
[1] 3 5 7 6
Warning message:
In c + e : longer object length is not a multiple of shorter object length
R суммирует то, что он может, а затем повторно использует более короткий вектор, чтобы заполнить пробелы ... Предупреждение было дано только потому, что два вектора имеют длины, которые не являются точно кратными. c + f # никакого предупреждения.
Некоторые операции с матрицами Предупреждение!
> Z+W # matrix + matrix #(componentwise)
> Z*W # matrix* matrix#(Standard product is always componentwise)
Для умножения матрицы: V% *% W
> W + a # matrix+ scalar is still componentwise
[,1] [,2] [,3]
[1,] 2 6 10
[2,] 3 7 11
[3,] 4 8 12
[4,] 5 9 13
> W + c # matrix + vector... : no warnings and R does the operation in a column-wise manner
[,1] [,2] [,3]
[1,] 3 8 13
[2,] 5 10 12
[3,] 7 9 14
[4,] 6 11 16
«Частные» переменные
Ведущая точка в имени переменной или функции в R обычно используется для обозначения того, что переменная или функция должны быть скрыты.
Итак, объявив следующие переменные
> foo <- 'foo'
> .foo <- 'bar'
И затем, используя функцию ls для отображения объектов, будет отображаться только первый объект.
> ls()
[1] "foo"
Однако при передаче all.names = TRUE в функцию будет отображаться «частная» переменная
> ls(all.names = TRUE)
[1] ".foo" "foo"