2012-09-07 10 views
8

Próbuję utworzyć pakiet w R, w którym utworzyłem wiele nowych niestandardowych klas. Każda klasa znajduje się w innym pliku. Klasy dziedziczą z klasy nadrzędnej i dziedziczą do innych klas.Łączenie wielu plików podczas tworzenia pakietu w R

Podczas pracy moje kody Wzywam każdego z nich jak to

source("package/father.R") 
source("package/son.R") 
source("package/grandson.R")  

Definicja Niektóre z metod wymaganych przez klasę wnuka zdefiniowane w klasie syna. Używam package.skeleton() do wywoływania każdego z nich i tworzenia pakietu i wygląda na to, że działa dobrze. Ale przy uruchomieniu R CMD Check (i przy próbie instalacji do R), generuje błąd, ponieważ funkcja próbuje wywołać pliki w kolejności alfabetycznej, tak więc plik grandson.R jest wywoływany przed son.R i pokazuje i mówi błąd że metody nie zostały zdefiniowane. Jeśli zmienię nazwy na zgrandson.R, R nazwał ten plik jako ostatni i wszystko wydaje się działać dobrze, ale nie jest to oczywiście rozwiązanie problemu.

Czytałem tutoriale do tworzenia pakietów, ale wszystkie wydają się radzić sobie z prostymi przypadkami, w których nie ma dziedziczenia/wywoływania innych plików w R. Mam nadzieję, że jasno się wyraziłem.

+0

miła praca przy pierwszym poście. –

+2

"Jeśli zmienię nazwy na zgrandson.R, R nazwał ten plik jako ostatni, a wszystko wydaje się działać dobrze, ale to najwyraźniej nie jest rozwiązaniem problemu." Czemu? To jest właśnie to rozwiązanie, którego używam, i wiele innych (rozpocznij pierwsze skrypty z czymś w rodzaju '00klasses.R'). –

+0

To działa dobrze, ale wyglądało na taki brzydki/hackish sposób rozwiązania problemu: D. Dziękuję za poinformowanie mnie, że inni ludzie również używają tego rozwiązania. Chociaż zastanawiam się, czy problem dotyczy samej mojej struktury kodu, ponieważ żaden ze skryptów dobrych programistów, przez które przeszedłem, nie wydaje się wywoływać innych plików. –

Odpowiedz

5

O ile rozumiem, można użyć pola Collate w pliku , aby to kontrolować.

Cytując z Writing R Extensions manual:

pole An „zestawianie” mogą być używane do kontrolowania porządku sortowania dla pliki kodu R w opakowaniu, gdy są one przetwarzane pakietu instalacji. Wartością domyślną jest sortowanie zgodnie z ustawieniami regionalnymi "C". Jeśli jest obecna, specyfikacja sortowania musi zawierać listę wszystkich plików kodów R w pakiecie (biorąc pod uwagę możliwe podkatalogi specyficzne dla OS, patrz podkatalogi Pakiety) jako oddzieloną spacjami listę plików ścieżek względem podkatalogu R. Ścieżki zawierające białe znaki lub cytaty muszą być cytowane. Pole zbiorcze specyficzne dla OS: ("Collate.unix" lub "Collate.windows") zostanie użyte zamiast "Sortuj".

Tak, można określić:

Collate: 
    father.r 
    son.R 
    grandson.r 

Albo po prostu zmienić nazwy plików w taki sposób, że kolejność sortowania leksykograficzny spowoduje w odpowiedniej kolejności sortowania, jak wskazano w swoim pytaniu.


ale także zobaczyć this answer przez @DirkEddelbuettel na podobnym pytaniem.

+0

Doskonała odpowiedź! Wielkie dzięki za super szybką odpowiedź :) –

Powiązane problemy