Заставить rstudio использовать браузер вместо просмотра
Рассмотрим любую функцию, которая (для rstudio) откроет что-то в средстве просмотра, еслиy = TRUE
и в вашем браузере, еслиy = FALSE
, Вы можете заставитьwhatever
открыть в вашем браузере черезoptions(viewer = NULL)
(а затем вам нужно сбросить до), но я не могу заставить это работать внутри функций, использующих обычныйon.exit
подход. Проверено на windows и osx.
f <- function(x, y = TRUE) {
if (y) {
oo <- getOption('viewer')
on.exit(options(viewer = oo))
options(viewer = NULL)
} else options(viewer = NULL)
print(getOption('viewer'))
DT::datatable(x)
}
g <- function(x, y = TRUE) {
if (y) {
oo <- getOption('viewer')
on.exit(options(viewer = oo))
options(viewer = NULL)
} else options(viewer = NULL)
print(getOption('viewer'))
htmlTable::htmlTable(x)
}
## in rstudio, returns the viewer function
getOption('viewer')
# function (url, height = NULL)
# ...
## opens in viewer despite `options(viewer = NULL)`
g(mtcars)
# NULL
## again returns the function, ie, reset my options to before g call successfully
getOption('viewer')
# function (url, height = NULL)
# ...
## opens in browser but leaves `options(viewer = NULL)` after exiting
g(mtcars, FALSE)
# NULL
getOption('viewer')
# NULL
Кажется, что зритель не уважает мои параметры в функциональной среде с помощью всего лишь нескольких HTML (g
) или виджет (f
). Я думал, что оба будут использоватьviewer = NULL
внутри функции и возвращаю мои параметры так, как они были при выходе, чтобы я мог контролировать, где я хочу просмотреть результат.
Или есть лучший способ сделать это для HTML и виджетов? Я попробовалoptions
аргумент вDT::datatable
безрезультатно, но это не поможетhtmlTable::htmlTable
дело.
Единственный другой подход, который я могу придумать, - записать весь код во временный файл и использоватьif (rstudio) rstudio::viewer(tempfile) else browseURL(tempfile)
что я думаю, это большая работа для чего-то, казалось бы, так просто.