Существует ли способ определить, генерирует ли функция число в 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
Спасибо
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()
.
Если для ваших целей можно заранее отключить все устройства, тогда проверка .Devices будет хорошей, потому что тогда команды построения создают новое устройство. Но тогда lines () и points () будут исключениями.
Фактически, это говорит о том, что вопрос не просто имеет верный или ложный ответ, но зависит от условий. Некоторые функции будут рисовать что-то, даже если нет открытого устройства, в то время как другие будут рисовать что-то, если есть что-то еще нарисованное. Что бы вы хотели сделать в этом случае?