«Я использую пакет неправильно?»
Нет, вы не используете пакет неправильно.Как указывает @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, как и ожидалось.