Есть ли причина, по которой общие типы данных / контейнер R индексируются так по-разному? - PullRequest
0 голосов
/ 19 марта 2020

общие типы контейнеров, используемые в R: data.tables, data.frames, матрицы и списки (возможно, еще ?!). Все эти типы хранилищ имеют немного разные правила индексации. Допустим, у нас есть простой dataset с именованными столбцами:

name1 name2
1     11
2     12
...     ...
10     20

Теперь мы поместим эти данные в каждый контейнер соответственно. Если я хочу индексировать число 5 в столбце name1, оно выглядит следующим образом:

lists:        dataset[['name1']][5]
-> why the double brackets?!?!

data frames:  dataset$name1[5] or dataset[5,'name1']
-> here are two options possible, why the ambiguity?!?

data table:   dataset$name1[5]
-> why is it here only one possibility

Я часто сталкиваюсь с этой проблемой и, исходя из python, это что-то очень странное. Кроме того, это приводит к чрезвычайно утомительной отладке. В python это решается очень единообразным способом, где индексация является довольно стандартной для списков, numpy массивов, pandas фреймов данных и т. Д. c.

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Вы ссылаетесь на пример data.frame в R, а затем go, чтобы сказать, что вы привыкли к pandas, за исключением того, что у них есть прямые, стандартные эквиваленты в pandas для точно такой же цели, поэтому не знаете, где путаница приходит от.

dataset$name1[5] -> dataset['name1'][5] или dataset.name1[5]

dataset[5, 'name1'] -> dataset.loc[5, 'name1']

1 голос
/ 20 марта 2020

Используя определения в примечании в конце, все они работают и дают один и тот же ответ.

L[["name1"]][5]
DF[["name1"]][5]
DT[["name1"]][5]

L$name1[5]
DF$name1[5]
DT$name1[5]

Кажется вполне разумным, что для фрейма данных, который концептуально является двумерным объектом, может быть два индекса, тогда как список, который одномерный, принимает один.

[[и [имеют разные значения, поэтому я не уверен, что здесь играет роль последовательность.

Примечание

L <- list(name1 = 1:10, name2 = 11:20)
DF <- as.data.frame(L)

library(data.table)
DT <- as.data.table(DF)
1 голос
/ 19 марта 2020

A data.frame - это list с равными элементами равной длины. Мы используем $ или [[ для извлечения элементов list, иначе это все равно будет list с одним элементом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...