Получить информацию о местонахождении графического вывода в R программно - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть функция, которая возвращает довольно большой объект определенного типа (сложная структура списка), который не имеет смысла отображать пользователю, потому что он загромождает экран.

returnsMuchStuff <- function() {
    ret <- list(x=rnorm(170), y=rnorm(170))
    class(ret) <- "MuchStuff"
    return(ret)
}

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

print.MuchStuff <- function(stuff) {plot(stuff$x, stuff$y)}
returnsMuchStuff() # displays plot - if plot can be displayed

Это работает нормально, если я, например, использую RStudio. Но я также хотел бы поддержать пользователей в командной строке, используя терминальный сервер, который не может напрямую просматривать график. В этом случае может оказаться, что по умолчанию выводится файл PDF.

Затем я хотел бы отобразить сообщение «PDF-файл / путь / к / файлу, созданному с помощью plot», потому что в противном случае для пользователя не очевидно, что здесь происходит.

Возможно ли это как-тоопределить, использует ли пользователь графический интерфейс или вывод будет отображен в файле? И если он отображается в файле, как я могу получить путь?

Единственное, что я нашел на этом пути, - это использование options("device"). Но это выводит функцию, из которой я не могу извлечь эту информацию программно:

> options("device")
$device
function (file = if (onefile) "Rplots.pdf" else "Rplot%03d.pdf",
    width, height, onefile, family, title, fonts, version, paper,
    encoding, bg, fg, pointsize, pagecentre, colormodel, useDingbats,
    useKerning, fillOddEven, compress)
{
    initPSandPDFfonts()
    new <- list()
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...