这将取决于你的'模型'文件夹存储在哪里。所以,假装它与你闪亮的应用程序在同一个目录中。下面是一些应该重现这种情况的代码,以及两个单独文件夹中的一些模型和数据。只要将变量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
存在问题,如下图所示。在本例中,我使用mget()
捕获来源input.R
文件中的所有变量。
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