13 июля 2011

Объекты и типы данных R: списки



В отличие от вектора или матрицы, которые могут содержать данные только одного типа, в список (list) можно включать сочетания любых типов данных. Это позволяет эффективно, т.е. в одном объекте, хранить разнородную информацию. В частности, результаты большинства статистических анализов в программе R хранятся в объектах-списках, которые содержат текстовые значения и числа.

Для создания списков в R служит одноименная функция list(). Рассмотрим пример:

# Cначала создадим три разнотипных вектора - с текстовыми,
# числовыми и логическими значениями:
 
vector1 <- c("A", "B", "C")
vector2 <- seq(1, 3, 0.5)
vector3 <- c(FALSE, TRUE)
 
# Теперь объединим эти три вектора в один объект-список, 
# компонентам которого присвоим имена Text, Number и Logic:
 
my.list <- list(Text=vector1, Number=vector2, Logic=vector3)
 
# Просмотрим содержимое созданного списка:
 
> my.list
$Text
[1] "A" "B" "C"
 
$Number
[1] 1.0 1.5 2.0 2.5 3.0
 
$Logic
[1] FALSE  TRUE


Как и в случае с векторами и матрицами, мы можем извлекать определенные элементы списков путем индексирования. Для обращения к поименованным компонентам списков применяют знак $. Так, для извлечения компонентов Text, Number и Logic из созданного нами списка my.list необходимо последовательно ввести следующие команды:

my.list$Text
[1] "A" "B" "C"
 
my.list$Number
[1] 1.0 1.5 2.0 2.5 3.0
 
my.list$Logic
[1] FALSE  TRUE

Имеется возможность извлекать из списка не только его поименованные компоненты-векторы, но и отдельные элементы, входящие в эти векторы. Для этого необходимо воспользоваться уже рассмотренным ранее способом – индексацией при помощи квадратных скобок. Единственная особенность работы со списками здесь состоит в том, что сначала необходимо указать имя компонента списка, используя знак $, а уже затем номер(а) отдельных элементов этого компонента:

my.list$Text[2]
[1] "B"
 
my.list$Number[3:5]
[1] 2.0 2.5 3.0
 
my.list$Logic[1]
[1] FALSE


Извлечение компонентов списка можно осуществлять также с использованием двойных квадратных скобок, в которые заключается номер компонента списка:

my.list[[1]]
[1] "A" "B" "C"
 
my.list[[2]]
[1] 1.0 1.5 2.0 2.5 3.0
 
my.list[[3]]
[1] FALSE  TRUE

После двойных квадратных скобок с индексным номером компонента списка можно также указать номер(а) отдельных элементов этого компонента:


my.list[[1]][2]
[1] "B"
 
my.list[[2]][3:5]
[1] 2.0 2.5 3.0
 
my.list [[3]][1]
[1] FALSE


Созданный нами список my.list содержал всего лишь три небольших вектора, и мы знали, какие это векторы, и на каком месте в списке они стоят. Однако на практике можно столкнуться с гораздо более сложно организованными списками, индексирование которых может быть затруднено из-за отсутствия представлений об их структуре. Для выяснения структуры объектов в языке R имеется специальная функция str() (от structure):

str(my.list)
List of 3
 $ Text  : chr [1:3] "A" "B" "C"
 $ Number: num [1:5] 1 1.5 2 2.5 3
 $ Logic : logi [1:2] FALSE TRUE

Из приведенного примера следует, что список my.list состоит из 3 компонентов (List of 3) с именами Text, Number и Logic (перечислены на отдельных строках после знака $). Эти компоненты относятся к текстовому (chr), числовому (num) и логическому (logiс) типам векторов соответственно. Кроме того, команда str() выводит на экран первые несколько элементов каждого вектора.

-- 
Создано при помощи Pretty R на сайте inside-R.org

Комментариев нет :

Отправить комментарий