2012-08-29 13 views
13

Algunos antecedentes:Cambie la función interna de un paquete

Tengo que usar la función HMR del paquete HMR mucho. Desafortunadamente, esta función es muy lenta. (HMR es esencialmente una función de ajuste, que está diseñada para ser lo más robusta posible, que es una de las razones de la falta de eficiencia.) La función HMR llama a la función HMR::.HMR.fit1, que hace la conexión real. Usando Rprof Sé que el problema principal con respecto a la eficiencia es el uso de lsfit, que se llama mucho. Por lo tanto, modifiqué el código de .HMR.fit1 para llamar directamente a la función C utilizada por lsfit sin toda la sobrecarga de lsfit, lo que debería dar como resultado una ganancia de velocidad considerable.

Ahora me gustaría sustituir HMR::.HMR.fit1 con mi función modificada y probar HMR si da los mismos resultados y la velocidad que gano.

he tratado de hacer esto:

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

Sin embargo, HMR::.HMR.fit1 no se modifica al hacer esto y al parecer HMR::HMR no utiliza mi función de ajuste modificado. ¿Hay alguna manera de lograr lo que quiero sin construir el paquete desde la fuente, lo que no puedo hacer debido a las restricciones de derechos de usuario en mi computadora (Windows)?

En este momento, mi solución sería copiar el código de HMR::HMR, pero espero que haya una solución más conveniente.

Respuesta

6

Para una prueba rápida que puede utilizar la función trace con edit=TRUE para modificar la función, esto va a hacer la sustitución en el espacio de nombres adecuado y también permitirá utilizar untrace para revertir la función al original. Estos cambios no durarán más allá de la sesión actual.

Cuestiones relacionadas