Это будет зависеть от того, где хранится ваша папка «models». Итак, притворитесь, что он находится в том же каталоге, что и ваше блестящее приложение. Вот какой код, который должен воссоздать эту ситуацию, наряду с некоторыми моделями и данными в двух отдельных папках. Просто измените переменную appDir
туда, где у вас нет папки.
## Create the models/folders in a temporary location
## define it in appDir
appDir <- 'c:/path/to/temp/app'
dir.create(appDir)
dir.create(file.path(appDir, "models"))
for (i in 1:2) {
dir.create((folder = file.path(appDir, "models/", LETTERS[i])))
code <- bquote({
dat <- data.frame((x=rnorm(100)), y=rnorm(100, mean=.(i)*x))
mod <- lm(y ~ x, data=dat)
})
writeLines(deparse(code), file.path(folder, 'input.R'))
}
Затем в новой папке appDir
, создать файл app.R
, который будет примером приложения. Существуют проблемы с тем, как вы пытаетесь использовать reactive
, как показано ниже. В этом примере я фиксирую все переменные из файлов input.R
с использованием mget()
.
library(shiny)
app <- shinyApp(
ui = fluidPage(
selectInput("model_folder", "Select folder", c("A", "B")),
uiOutput('info'),
tableOutput('summ')
),
server = function(input, output) {
output$info <- renderUI({
inp <- inpts()
list(
helpText(sprintf("Now looking at variables from %s", inp$name)),
radioButtons('vars', 'Variables', choices=names(inp), inline=TRUE)
)
})
output$summ <- renderTable({
inp <- inpts()
if (input$vars == 'mod') summary(inp$mod)
})
inpts <- reactive({
name <- file.path("models", input$model_folder, "input.R")
source(name, local=TRUE)
mget(ls())
})
}
)
Теперь, чтобы запустить его, вы можете просто сделать
library(shiny)
runApp(appDir = normalizePath(appDir))
что вы хотите, чтобы произошло, когда вы снабжаем 'inpts'? Вы просто пытаетесь сохранить модель в переменной (т. Е. Результат 'lm' или какой-то такой)? – jenesaisquoi
Существует несколько функций в 'inputs.R' (которые будут иметь разную функциональность между папками A и B), которые я хочу сделать доступными для сеанса. – Jim
, чтобы вы возвращали список переменных? Функции должны возвращать одно значение. – jenesaisquoi