2010-04-30 11 views
7

C'è un modo per determinare se una funzione genera una figura in R?Come determinare se una funzione genera un grafico

Per esempio, se abbiamo funzioni f e g

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

Vorrei in grado di eseguire

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

Grazie

+0

BTW Colin, sono curioso di sapere come una tale funzione potrebbe essere utile? Best, Tal –

+0

Gli studenti presentano alcune funzioni come corsi. Una delle loro funzioni dovrebbe produrre un grafico. Quindi uso Sweave per eseguire i corsi e verificare la correttezza. Tuttavia, se la funzione non è corretta e non produce alcuna grafica, non riesco a compilare il file tex risultante. – csgillespie

+2

IMHO, questa è la domanda più sottovalutata nella sezione SO di SO. Grazie per avermelo chiesto, e @hadley, grazie per aver salvato la giornata! =) – aL3xa

risposta

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 funzione .getSnapshot è stato scoperto, cercando in fonte di recordPlot().

+3

Molto ben fatto! –

+0

+1 Forse includerlo in ggplot2 in modo che sia prontamente disponibile? – Shane

+1

Bello! (compiuto min (lunghezza (commento)) – Dan

0

Se, per i vostri scopi, è OK per avere tutti i dispositivi in ​​anticipo, quindi controllare. I dispositivi andrebbero bene perché poi i comandi di tracciamento fai un nuovo dispositivo. Ma poi lines() e points() sarebbero eccezioni.

In realtà, questo suggerisce che la domanda non ha solo una risposta vera o falsa, ma dipende dalle condizioni. Alcune funzioni disegneranno qualcosa anche se non ci sono dispositivi aperti mentre altri disegneranno qualcosa se c'è qualcos'altro disegnato. Cosa vorresti fare in quel caso?

+0

Ho un documento Sweave che chiama la funzione. Se viene creato un grafico, lo includo nel file Tex. Le funzioni provengono dagli studenti. – csgillespie

Problemi correlati