Неверное значение для комбинации в R - PullRequest
0 голосов
/ 19 февраля 2019

Используя пакет combinat в R, я получаю неправильный ответ для

dim(combn(9,9))[2]

Я получаю NULL вместо 1

Я неправильно использую пакет?Или есть другой пакет для решения этой проблемы?

1 Ответ

0 голосов
/ 20 февраля 2019

«Я использую пакет неправильно?»

Нет, вы не используете пакет неправильно.Как указывает @joran, из документации для аргумента simplify для combinat::combn (значение по умолчанию TRUE) ожидается следующее:

Если упрощение равно ЛОЖЬ,возвращает список;else возвращает вектор или массив.

Итак, в вашем примере, поскольку combinat::combn(9, 9) имеет только один результат, возвращается вектор, который не имеет атрибутов, таких как матрица (например, dim).

«Или есть другой пакет для решения этой проблемы?»

Да, просто используя пакет utils, который входит в качестве одной из стандартных библиотек с Rустраняет эту проблему (так же, как combinat, значение по умолчанию для simplify равно TRUE):

## with utils
dim(utils::combn(9,9))[2]
[1] 1

Опять же, из документов для utils::combn мы имеем (выделение мое):

Скотт Часалоу написал оригинал в 1994 году для S;Комбинация пакетов R и документация Винса Кэри stvjc@channing.harvard.edu;небольшие изменения основной командой R, в частности, для возврата ARRAY во всех случаях упрощения = TRUE, например, для combn (5,5).

Обратите внимание, что в нем говорится массив (массив в R - это вектор с дополнительными атрибутами, более того, двумерный массив - это просто матрица), и в нем не упоминается вектор, как это было с combinat.

А что касается тщательности, вот что utils::combn говорит для аргумента simplify:

логическое указание, следует ли упростить результат до массива (обычно матрицы);если FALSE, функция возвращает список.Обратите внимание, что при упрощении = TRUE, как по умолчанию, размер результата просто определяется из FUN (1-я комбинация) (по соображениям эффективности).Это плохо сработает, если FUN (u) не имеет постоянной длины.

Так как у нас есть только 1 комбинация из utils::combn(9, 9), мы получаем массив (то есть матрицу) с 1 столбцом и 9 строкамитак что вызов dim()[2] возвращает 1, как и ожидалось.

...