Поиск…


Переменные, структуры данных и основные операции

В 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"   


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