Estoy tratando de encontrar una contraparte global en isdebugged()
en R. Mi hipótesis es que tengo funciones que hacen llamadas a otras funciones, todas las cuales he escrito, y estoy convirtiendo debug()
activado y desactivado para diferentes funciones durante la depuración. Sin embargo, puedo perder la pista de las funciones que se configuran para ser depuradas. Cuando me olvido y empiezo un ciclo, puedo obtener un rendimiento mucho mayor (molestia, pero no terrible) o puedo obtener ningún resultado cuando se desea (mal).Funciones de listado con indicador de depuración establecido en R
Mi enfoque actual es utilizar una función similar a la siguiente, y puedo llamarla con listDebugged(ls())
o listar los elementos en una biblioteca cargada (ejemplos a continuación). Esto podría ser suficiente, pero requiere que lo llame con la lista de cada función en el espacio de trabajo o en los paquetes que se cargan. Puedo ajustar otra función que los obtenga. Parece que debería haber una forma más sencilla de simplemente "preguntar" a la función de depuración o consultar alguna parte oscura del entorno donde se esconde la lista de funciones con el indicador de depuración establecido.
Por lo tanto, una pregunta de dos partes:
- ¿Hay una llamada más simple que existe para consultar las funciones con el indicador de depuración?
- Si no, ¿hay algún truco que haya pasado por alto? Por ejemplo, si una función en un paquete enmascara a otra, sospecho que puedo devolver un resultado engañoso.
que dan cuenta de que hay otro método que podría tratar y que es envolver debug
y undebug
dentro de las funciones que también mantienen una lista de nombres de funciones oculto depuradas. Todavía no estoy convencido de que sea algo seguro de hacer.
ACTUALIZACIÓN (5/08/11): Busqué SO, y no encontré las preguntas anteriores. Sin embargo, la lista de "preguntas relacionadas" de SO ha mostrado que an earlier question that is similar, aunque la función en la respuesta para esa pregunta es a la vez más detallada y más lenta que la función ofrecida por @cbeleites. La pregunta anterior tampoco proporciona ningún código, mientras que yo sí. :)
El código:
listDebugged <- function(items){
isFunction <- vector(length = length(items))
isDebugged <- vector(length = length(items))
for(ix in seq_along(items)){
isFunction[ix] <- is.function(eval(parse(text = items[ix])))
}
for(ix in which(isFunction == 1)){
isDebugged[ix] <- isdebugged(eval(parse(text = items[ix])))
}
names(isDebugged) <- items
return(isDebugged)
}
# Example usage
listDebugged(ls())
library(MASS)
debug(write.matrix)
listDebugged(ls("package:MASS"))
En la base R, no hay forma de hacer ese trabajo más que envolviendo la función 'debug'. – kohske