Включить приложение Shiny в пакет R: передать входной параметр - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь запустить приложение 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 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать среды для перемещения данных почти в любую точку 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...