2013-04-08 3 views
5

Поведение по умолчанию в R для уменьшения двумерной матрицы до 1 строки - это фактически сбросить измерение. Это может быть «исправлено», поставив drop = FALSE в конце поиска матрицы. Есть ли способ сделать это по умолчанию? У меня довольно длинная программа, и я понял, что мне придется добавить это примерно в 100 мест, если нет ... Я искал опции,? '[' И? Matrix безрезультатно.альтернатива drop = FALSE или изменение поведения по умолчанию

+0

Пишите сценарий Perl или shell над кодом, чтобы сделать замены. Хорошо, возможно, не так просто определить, но стоит сделать снимок. – igelkott

+2

Я считаю, что есть хаки (перегруженные '[' и т. Д.), Но в целом я думаю, что нет никакого способа изменить это поведение во всем мире. Лучшим вариантом может быть очень хорошее обновление кода. – joran

+0

благодаря тому, кто связал ранее заданный вопрос, это прекрасно. – hedgedandlevered

ответ

5

Вы можете переопределить `[` так:

old <- `[` 
`[` <- function(...) { old(..., drop=FALSE) } 

Эта модификация должна быть локальной для интерактивной сферы и, следовательно, не влияют на процедуры, которые полагаются на другое поведение. Однако никаких гарантий. И будьте готовы, чтобы код этой формы, скорее всего, смутил бы читателей вашего кода, которые привыкли к другой семантике.

Возможно, вы можете внести это изменение локально в определенную функцию, а не весь свой код?

Один из вариантов - это написать собственный класс для объектов матрицы, для которых вы можете предоставить свою собственную реализацию оператора подмножества. Это имеет смысл, если вы создаете матрицы в очень ограниченном количестве мест, но может быть проблемой, если существует большое количество путей кода, создающих эти матрицы.