Ответ 1
Хороший вопрос. Сначала правильная терминология (от?data.table
):
[Таблица данных.] может иметь один ключ из одного или нескольких столбцов. Этот ключ можно использовать для индексирования строк вместо имен ростов.
Итак, "ключ" (singlelular) не "ключи" (множественное число). В настоящее время мы можем уйти с "ключами". Но когда дополнительные ключи добавляются в будущем, тогда может быть несколько ключей. Каждый ключ (единственный) может иметь несколько столбцов (множественное число).
В противном случае вы абсолютно правы. Следующий абзац был улучшен в v1.8.2 на основе обратной связи от других, которые также были смущены. От ?data.table
:
Когда я является таблицей данных, x должен иметь ключ. я присоединяется к x с помощью x ключа и возвращаются строки в x, которые соответствуют. Соединительное соединение выполняется между каждым столбцом в я до каждого столбца по ключу x; то есть столбец 1 я сопоставляется с первым столбцом ключа x, столбца 2 ко второму и т.д. Соответствие представляет собой двоичный поиск в скомпилированном C в O (log n) времени. Если у я меньше столбцов, чем x, тогда многие строки x будут обычно соответствовать каждой строке i, так как не все столбцы ключа x будут соединены (общий пример использования). Если у меня больше столбцов, чем ключ x, столбцы i, не участвующие в объединении, включаются в результат. Если у меня также есть ключ, это ключевые столбцы, которые используются для соответствия столбцам ключа x (столбец 1 ключа я соединен с столбцом 1 ключа x, столбцом 2 и столбцом 2 и т.д.) И двоичным слиянием из двух таблиц. Во всех объединениях имена столбцов не имеют значения. Столбцы x-ключа объединяются по порядку, начиная с столбца 1, начиная с i, когда я не замкнут, или от столбца 1 от ключа i.
Следуя комментариям, в v1.8.3 (на R-Forge) это теперь читает (изменяется жирным шрифтом):
Когда я является таблицей данных, x должен иметь ключ. я присоединяется к x с помощью x ключа и возвращаются строки в x, которые соответствуют. Соединительное соединение выполняется между каждым столбцом в я до каждого столбца по ключу x; то есть столбец 1 я сопоставляется с первым столбцом ключа x, столбца 2 ко второму и т.д. Соответствие представляет собой двоичный поиск в скомпилированном C в O (log n) времени. Если у я меньше столбцов, чем x, тогда не все столбцы ключа x будут объединены (общий пример использования), и многие строки x будут (обычно) соответствовать каждой строке i. Если у меня больше столбцов, чем ключ x, столбцы i, не участвующие в объединении, включаются в результат. Если у меня также есть ключ, это ключевые столбцы, которые используются для соответствия столбцам ключа x (столбец 1 ключа я соединен с столбцом 1 ключа x, столбец 2 ключа я для столбца 2 ключа x, и т.д. до тех пор, пока используется более короткий ключ) и выполняется двоичное слияние двух таблиц. Во всех объединениях имена столбцов не имеют значения; столбцы x-ключа объединяются по порядку, начиная с столбца 1 и после i, когда я не является ключом, или от столбца 1 от i-го ключа. В коде количество столбцов соединения определяется по min (length (key (x)), if (haskey (i)) length (key (i)) else ncol (i)).