我正在建立一个闪亮的应用程序,该应用程序请求一个数据集,询问有关所述数据集的信息,然后在考虑到有关数据集的信息(例如名称)的情况下,对所述数据集运行一系列分析模型在回归中要调整的变量数)。该应用程序从带有数据上传输入的简单UI开始。用户上传数据后,我希望UI动态添加一个新部分,要求用户从数据集的列标签中选择变量的子集。
我正在通过Linux AWS计算机使用RStudio服务器。
我的应用程序是作为另一个R包的附件生成的,该R包充当我所需的大多数统计功能的包装。由于该应用程序非常大,因此UI由一些标准文本和一系列为UI调用tabItems的函数组成。
在下面的示例中,UI具有标准的数据上传用户输入。除此之外,我还尝试在服务器端使用Shiny :: renderUI来获取用户提供的数据集,读取列,然后通过Shiny :: varSelectInput()返回列集。不幸的是,我的应用程序在上传数据后未提供此新输入。
ui_data_1 <- function(){
y<-tabItem(tabName = "load_dat",
shiny::tabsetPanel(type = "tabs",
# Data upload ---- -
h2("Data"),
p("Please upload your data file"),
shiny::fileInput(
inputId = "data_file", label = "Upload patient data file (.csv Only)",
accept = c(".csv")
),
h2("Treatment"),
p("Instructions for treatment"),
shiny::uiOutput("variables"))
)
)
return(y)
}
server_data_1 <- function(){
y <- shiny::renderUI({
inFile <- input$data_file
# Load data
if (is.null(inFile)) {
df <- shiny::reactive({NULL})
} else {
df <- shiny::reactive({read.csv(inFile$datapath, header = input$header)})
}
varnames <- colnames(df())
shiny::varSelectInput(
inputId = "treat",
label = "Treatment Variable",
data = c(varnames)
)
})
return(y)
}
#UI.R
body <- shinydashboard::dashboardBody(
ui_data_1()
)
ui <- shinydashboard::dashboardPage(header, sidebar, body, skin = "black")
#Server.R
server <- function(input, output) {
output$variables <- server_data_1()
}
shiny::shinyApp(ui, server)
应用正确加载,数据上传菜单也正确加载。上载数据时,我收到一条通知,指示上载成功。与inputId =“ treat”关联的标签在整个时间内都是可见的。但是,按预期上传数据后不会填充变量选择菜单。也许我做错了什么。在此先感谢您的任何建议。