2012-08-29 16 views
13

Niektóre tła:Zmień funkcję wewnętrznego pakietu

muszę użyć funkcji HMR z pakietu HMR dużo. Niestety ta funkcja jest bardzo powolna. (HMR jest zasadniczo funkcją dopasowania, która ma być tak silna, jak to możliwe, co jest jedną z przyczyn braku wydajności.) Funkcja HMR wywołuje funkcję HMR::.HMR.fit1, która dokonuje rzeczywistego dopasowania. Korzystanie z Rprof Wiem, że głównym problemem związanym z wydajnością jest użycie lsfit, które często się nazywane. W związku z tym zmodyfikowałem kod .HMR.fit1, aby wywołać funkcję C używaną przez lsfit bezpośrednio, bez całego obciążenia w postaci lsfit, co powinno skutkować znacznym wzrostem prędkości.

Teraz chciałbym zastąpić HMR::.HMR.fit1 moją zmodyfikowaną funkcją i przetestować HMR, jeśli daje takie same wyniki i ile zyskuję.

Próbowałem to zrobić:

mod.fun <- function(<many args>) { 
<a lot of code> 
} 
environment(mod.fun) <- environment(.HMR.fit1) 
.HMR.fit1 <- mod.fun 

Jednak HMR::.HMR.fit1 nie zmienia się w ten sposób i widocznie HMR::HMR nie używać zmodyfikowanej funkcji dopasowania. Czy istnieje sposób na osiągnięcie tego, czego chcę, bez budowania pakietu ze źródła, którego nie mogę zrobić z powodu ograniczeń praw użytkownika na moim komputerze (z systemem Windows)?

W tej chwili moim rozwiązaniem byłoby skopiowanie kodu HMR::HMR, ale mam nadzieję, że jest wygodniejsze rozwiązanie.

Odpowiedz

6

Dla szybkiego testu można użyć funkcji trace z edit=TRUE zmodyfikować funkcję, będzie to zrobić zastępując w odpowiedniej przestrzeni nazw, a także pozwalają na skorzystanie untrace przywrócić funkcję z powrotem do oryginału. Zmiany te nie potrwają dłużej niż bieżąca sesja.

Powiązane problemy