Рассмотрите любую функцию, которая (для rstudio) откроет что-то в средстве просмотра, если y = TRUE
и в вашем браузере, если y = FALSE
. Вы можете заставить whatever
открыть в своем браузере через options(viewer = NULL)
(а затем вам нужно выполнить сброс до этого), но я не могу заставить это работать внутри функций, используя обычный подход on.exit
. Протестировано на окнах и osx.Принудительное использование rstudio для использования браузера вместо зрителя
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
.
Единственный другой подход, о котором я могу думать, состоит в том, чтобы написать весь код в файл temp и использовать if (rstudio) rstudio::viewer(tempfile) else browseURL(tempfile)
, который, я думаю, много работает для чего-то вроде бы столь прямолинейного.
дополнительные очки, если кто-то может смотреть на мою историю изменений и скажите мне, как дифф знает, что я удалил те же символы, двумя различными способами – rawr
я послал вверх «Bat Signal» в Ushey. Надеюсь, он наблюдает за облаками в Сиэтле. – hrbrmstr