Pregunta

Necesito ejecutar una función línea por línea para entender cómo funciona.Pero la función es parte de un paquete instalado y no sé dónde almacena R la fuente de los paquetes instalados (por ejemplo, MultiPhen).Estoy usando RStudio 0.98.501 y R 3.0.2 en Ubuntu 12 (64it).Aparentemente el código fuente de los paquetes instalados no se almacena, ¿verdad?Lo siento si es una pregunta ingenua, soy nuevo en R.Si las fuentes no están almacenadas, ¿hay alguna forma de reinstalar un paquete con la fuente y depurarlo (básicamente colocar un punto de interrupción)?

Gracias,

kayhan

¿Fue útil?

Solución

Mira a trace.Aquí hay un ejemplo que agrega un punto de interrupción en la cuarta declaración en la función del paquete base. var.aquí preguntamos trace para invocar la función browser en la sexta declaración:

> trace(var, browser, at=6)
Tracing function "var" in package "stats"
[1] "var"
> var(1:10)
Tracing var(1:10) step 6 
Called from: eval(expr, envir, enclos)
Browse[1]> n
debug: if (is.data.frame(y)) y <- as.matrix(y) else stopifnot(is.atomic(y))
Browse[2]> n
debug: stopifnot(is.atomic(y))
Browse[2]> n
debug: .Call(C_cov, x, y, na.method, FALSE)
Browse[2]> n
[1] 9.166667

Recuerda untrace cuando termines.Puedes hacer cosas bastante complejas con trace, aunque en la mayoría de los casos trace(fun.name, browser) probablemente sea suficiente.

Alternativamente, puedes simplemente cargar el paquete y escribir el nombre de la función en la línea de comando así:

> var
function (x, y = NULL, na.rm = FALSE, use) 
{
    if (missing(use)) 
        use <- if (na.rm) 
            "na.or.complete"
        else "everything"
    na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", 
        "everything", "na.or.complete"))
    if (is.na(na.method)) 
        stop("invalid 'use' argument")
    if (is.data.frame(x)) 
        x <- as.matrix(x)
    else stopifnot(is.atomic(x))
    if (is.data.frame(y)) 
        y <- as.matrix(y)
    else stopifnot(is.atomic(y))
    .Call(C_cov, x, y, na.method, FALSE)
}
<bytecode: 0x000000000928ad30>
<environment: namespace:stats>

Luego puedes copiarlo en tu editor y jugar con él, agregar tu browser declaración y recorra los resultados.

Otros consejos

  1. Creo que cuando cuando escribe install.packages('MultiPhen'), obtienes una versión binaria del paquete. Creo que no hay manera de establecer un punto de interrupción y un código a través de esa versión del paquete.

  2. Todos los paquetes son de código abierto, y la fuente está disponible en la página de crane para el paquete. Por ejemplo, esta es la página de crane para multiphen. Si hace clic en el enlace junto al texto "Fuente del paquete:" descargará la fuente.

  3. En términos de qué hacer cuando tiene la fuente: todos los paquetes R tienen la misma estructura de directorio. Lo que importa para su situación es que todo el código R para el paquete está en el directorio llamado "R".

  4. Recomiendo desinstalar el paquete de RSTUDIO y obtener el código en el directorio "R", configurar los puntos de interrupción y pisar el código a través de su forma.

    Por favor, háganoslo saber si esto resuelve su problema.

Encontré una manera fácil de hacer esto.Primero, escriba un script para recuperar la función y luego configurar un punto de interrupción.Ejecute el guión, y se detiene en el punto de interrupción.Luego, puede ver que hay diferentes opciones para ejecutar el código.Siguiente línea, ingrese a la función, continúe, deténgase ... y ahora puede ejecutar la línea de código por línea y ejecutarse a su función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top