2013-04-08 15 views
5

Domyślnym zachowaniem w R dla zredukowania dwuwymiarowej macierzy do 1 wiersza jest faktyczne upuszczenie wymiaru. Można to "naprawić", umieszczając drop = FALSE na końcu wyszukiwania macierzy. Czy jest jakiś sposób, aby uczynić to domyślnym? Mam dość długi program i po prostu zdałem sobie sprawę, że będę musiał dodać to w około 100 miejscach, jeśli nie ma ... Szukałem? Opcji, matryc "?" I "bezskutecznie.alternatywa dla upuszczania = FALSE lub zmiana domyślnego zachowania

+0

Napisz skrypt Perla lub powłoki nad tobą, aby dokonać podstawień. OK, może nie być to łatwe do zdefiniowania, ale warte strzału. – igelkott

+2

Sądzę, że istnieją hacki (nadmiernie jeżdżące '[, itp.], Ale ogólnie myślę, że nie ma sposobu, aby zmienić to zachowanie na całym świecie. Najlepszym rozwiązaniem może być aktualizacja kodu. – joran

+0

dziękuję każdemu, kto połączył wcześniej zadane pytanie, to jest idealne. – hedgedandlevered

Odpowiedz

5

Można przedefiniować `[` takiego:

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

Modyfikacja ta powinna być lokalna na interaktywnej zakresie i dlatego nie wpływa na procedury, które opierają się na innych zachowań. Bez gwarancji. I bądź przygotowany, że kod tego formularza będzie prawdopodobnie mylić czytelników twojego kodu, którzy są przyzwyczajeni do innej semantyki.

Być może możesz zmienić tę lokalną na konkretną funkcję zamiast całego kodu?

Jedną alternatywą byłoby pisanie własnej klasy obiektów macierzy, dla których można podać własną implementację operatora podzbioru. Ma to sens, jeśli konstruujesz macierze w bardzo ograniczonej liczbie miejsc, ale może to stanowić problem, jeśli istnieje duża liczba ścieżek kodu konstruujących te macierze.

Powiązane problemy