Поведение по умолчанию в R для уменьшения двумерной матрицы до 1 строки - это фактически сбросить измерение. Это может быть «исправлено», поставив drop = FALSE в конце поиска матрицы. Есть ли способ сделать это по умолчанию? У меня довольно длинная программа, и я понял, что мне придется добавить это примерно в 100 мест, если нет ... Я искал опции,? '[' И? Matrix безрезультатно.альтернатива drop = FALSE или изменение поведения по умолчанию
ответ
Вы можете переопределить `[`
так:
old <- `[`
`[` <- function(...) { old(..., drop=FALSE) }
Эта модификация должна быть локальной для интерактивной сферы и, следовательно, не влияют на процедуры, которые полагаются на другое поведение. Однако никаких гарантий. И будьте готовы, чтобы код этой формы, скорее всего, смутил бы читателей вашего кода, которые привыкли к другой семантике.
Возможно, вы можете внести это изменение локально в определенную функцию, а не весь свой код?
Один из вариантов - это написать собственный класс для объектов матрицы, для которых вы можете предоставить свою собственную реализацию оператора подмножества. Это имеет смысл, если вы создаете матрицы в очень ограниченном количестве мест, но может быть проблемой, если существует большое количество путей кода, создающих эти матрицы.
Пишите сценарий Perl или shell над кодом, чтобы сделать замены. Хорошо, возможно, не так просто определить, но стоит сделать снимок. – igelkott
Я считаю, что есть хаки (перегруженные '[' и т. Д.), Но в целом я думаю, что нет никакого способа изменить это поведение во всем мире. Лучшим вариантом может быть очень хорошее обновление кода. – joran
благодаря тому, кто связал ранее заданный вопрос, это прекрасно. – hedgedandlevered