Заставить 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) что я думаю, это большая работа для чего-то, казалось бы, так просто.

Ответы на вопрос(2)

Ваш ответ на вопрос