Force rstudio, um den Browser anstelle des Viewers zu verwenden

Consider entweder Funktion, die (für rstudio) etwas im Viewer öffnen wird, wenny = TRUE und in Ihrem Browser, wenny = FALSE. Sie können das @ erzwingwhatever, um in Ihrem Browser über @ zu öffnoptions(viewer = NULL) (und dann müssen Sie vorher zurücksetzen), aber ich kann dies nicht innerhalb von Funktionen mit dem normalen @ arbeiton.exit Ansatz. Getestet unter Windows und 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

Es sieht so aus, als würde der Betrachter meine Optionen in der Funktionsumgebung mit nur ein wenig HTML (@) nicht respektiereg) oder ein Widget f). Ich dachte, beide würden @ verwendviewer = NULL Klicken Sie in die Funktion und geben Sie meine Optionen so zurück, wie sie beim Beenden waren, damit ich steuern kann, wo ich das Ergebnis anzeigen möchte.

Oder gibt es einen besseren Weg, dies für HTML und Widgets zu tun? Ich habe das @ ausprobieoptions argument inDT::datatable ohne Erfolg, aber das würde dem @ nicht helfhtmlTable::htmlTable Fall

Der einzige andere Ansatz, den ich mir vorstellen kann, ist, den gesamten Code in eine temporäre Datei zu schreiben und @ zu verwendeif (rstudio) rstudio::viewer(tempfile) else browseURL(tempfile) was meiner Meinung nach eine Menge Arbeit für etwas ist, das scheinbar so unkompliziert ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage