Как я могу определить, генерирует ли функция график - PullRequest
7 голосов
/ 30 апреля 2010

Есть ли способ определить, генерирует ли функция цифру в R ?

Например, если у нас есть функции f и g

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

Я бы хотел запустить

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

Спасибо

Ответы [ 2 ]

20 голосов
/ 30 апреля 2010
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))

Функция .getSnapshot была обнаружена при просмотре источника recordPlot().

0 голосов
/ 30 апреля 2010

Если для ваших целей все в порядке, если все устройства выключены, тогда проверка .Devices будет в порядке, потому что тогда команды построения действительно создают новое устройство. Но тогда линии () и точки () будут исключениями.

На самом деле, это говорит о том, что вопрос не просто имеет истинный или ложный ответ, а зависит от условий. Некоторые функции будут рисовать что-то, даже если нет открытого устройства, в то время как другие будут рисовать что-то, если будет нарисовано что-то еще. Что бы вы хотели сделать в этом случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...