2010-04-30 11 views
7

¿Hay alguna manera de determinar si una función genera una figura en R?¿Cómo puedo determinar si una función genera un gráfico

Por ejemplo, si tenemos funciones f y g

f = function(x,y){plot(x,y)} 
g = function(x,y){mean(x*y)} 

me gustaría poder correr

createFigure(f(x,y))#Returns TRUE 
createFigure(g(x,y))#Returns FALSE 

Gracias

+0

BTW Colin, tengo curiosidad sobre cómo una función así podría ser útil? Mejor, Tal –

+0

Los estudiantes envían algunas funciones como cursos. Una de sus funciones debería producir un gráfico. Luego uso Sweave para ejecutar sus cursos y verificar que sean correctos. Sin embargo, si la función es incorrecta y no produce ningún gráfico, no puedo compilar el archivo tex resultante. – csgillespie

+2

en mi humilde opinión, esta es la pregunta más subestimada en la sección R de SO. Gracias por preguntar, y @hadley, ¡gracias por salvar el día! =) – aL3xa

Respuesta

20
makes_plot <- function(x) { 
    before <- .Internal(getSnapshot()) 
    force(x) 
    after <- .Internal(getSnapshot()) 
    !identical(before, after) 
} 

makes_plot(mean(1:10)) 
makes_plot(plot(1:10)) 

La función .getSnapshot se descubrió mirando a la fuente de recordPlot().

+3

¡Muy bien hecho! –

+0

+1 ¿Quizás incluir eso en ggplot2 para que esté disponible? – Shane

+1

¡Agradable! (cumpliendo min (longitud (comentario)) – Dan

0

Si, para sus fines, es Está bien para tener todos los dispositivos apagados antes de la mano y luego verificar. Los dispositivos estarían bien porque luego trazar comandos hacer un nuevo dispositivo. Pero entonces las líneas() y los puntos() serían excepciones.

De hecho, esto sugiere que la pregunta no solo tiene una respuesta verdadera o falsa, sino que depende de las condiciones. Algunas funciones dibujarán algo incluso si no hay un dispositivo abierto, mientras que otras dibujarán algo si hay algo más dibujado. ¿Qué te gustaría hacer en ese caso?

+0

Tengo un documento Sweave que llama a la función. Si se crea un gráfico, lo incluyo en el archivo Tex. Las funciones provienen de los estudiantes. – csgillespie

Cuestiones relacionadas