Включить приложение 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