2012-06-04 2 views
1

Можно создать дубликат:
In R, what is the difference between the [] and [[]] notations for accessing the elements of a list?В чем разница между [1], [1,], [, 1], [[1]] для кадра данных в R?

Я запутался с разницей в [1], [1,], [, 1], [[1]] для типа dataframe ,

Как я знаю, [1,] выберет первую строку matrix, [, 1] выберет первый столбец. [[1]] выберет первый элемент list.

Но я проверил документ data.frame, который говорит

Фрейм данных представляет собой список переменных одного и того же количества строк с уникальными именами строк

Тогда я напечатал в некоторых кода для проверки использования.

>L3 <- LETTERS[1:3] 
>(d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, replace=TRUE))) 
    x y fac 
1 1 1 C 
2 1 2 B 
3 1 3 C 
4 1 4 C 
5 1 5 A 
6 1 6 B 
7 1 7 C 
8 1 8 A 
9 1 9 A 
10 1 10 A 
> d[1] 
    x 
1 1 
2 1 
3 1 
4 1 
5 1 
6 1 
7 1 
8 1 
9 1 
10 1 
>d[1,] 
    x y fac 
1 1 1 C 
>d[,1] 
[1] 1 1 1 1 1 1 1 1 1 1 
>d[[1]] 
[1] 1 1 1 1 1 1 1 1 1 1 

Что меня смутило это: [1] и [1] используется только в matrix. [[1]] используется только в list, а [1] используется в vector, но почему все они доступны в dataframe?

Может ли кто-нибудь объяснить разницу в этих целях?

+0

Фактически [[]] также может использоваться с кадрами данных – Alex

ответ

4

В R операторы не используются для одного типа данных только. Операторы могут быть перегружены для любого типа данных, который вам нравится (например, классы S3/S4).

На самом деле, это случай для data.frames.

  • , как data.frames списки, то [i] и [[i]]$) показывает список типа поведения.

  • строки, индексы colum имеют интуитивное значение для таблиц, а data.frames выглядят как таблицы. Вероятно, именно поэтому были определены методы для data.frame [i, j].

Вы даже можете посмотреть на определения, то они кодируются в системе S3 (так methodname.class):

> `[.data.frame` 

и

> `[[.data.frame` 

(кавычку экранирует имя функции, в противном случае R попытается использовать оператор и закончится синтаксической ошибкой)

 Смежные вопросы

  • Нет связанных вопросов^_^