Включить приложение Shiny в пакет R: Передать входной параметр

Я пытаюсь запустить приложение Shiny как часть пакета R. Я следовал инструкциям, перечисленным на сайте Дина Аттали ( https://deanattali.com/2015/04/21/r-package-shiny-app/).

Как показано на этом сайте, я создал следующие каталоги в моем пакете R:

- mypackage
  |- inst
     |- shiny-examples
        |- myapp
           |- ui.R
           |- server.R
  |- R
     |- runExample.R
     |- ...
  |- DESCRIPTION
  |- ...

Затем в моем файле runExample.R я использовал:

#' @export
runExample <- function() {
  appDir <- system.file("shiny-examples", "myapp", package = "mypackage")
  if (appDir == "") {
    stop("Could not find example directory. Try re-installing `mypackage`.", call. = FALSE)
  }

  shiny::runApp(appDir, display.mode = "normal")
}

Разница лишь в том, что я пытаюсь ввести один параметр в функцию () выше. Это называется data, поэтому я использую функцию (data=data).

Однако, если я запускаю runExample(data=myData), это вызывает ошибку, связанную с данными ("объект типа" замыкание "не может быть поднабором"). Я полагаю, что это потому, что data = myData не успешно переданы в приложение Shiny. Любые идеи о том, как подойти к этому вопросу, будут высоко оценены!

1 ответ

Решение

Вы можете использовать среды для перемещения данных почти в любую точку R. Я думаю, что это может сработать:

### runExample.R

PKGENVIR <- new.env(parent=emptyenv()) # package level envir

#' @export
runExample <- function(data) {
  appDir <- system.file("shiny-examples", "myapp", package = "mypackage")
  if (appDir == "") {
    stop("Could not find example directory. Try re-installing `mypackage`.", call. = FALSE)
  }
  PKGENVIR$DATA <- data # put the data into envir
  shiny::runApp(appDir, display.mode = "normal")
}

Тогда в server.R:

### inside shiny app
data <- PACKAGE_NAME:::PKGENVIR$DATA ## read the data from envir
Другие вопросы по тегам