我正在建立一个应用程序,根据用户的想法,我想加载一个或另一个数据源。 我能够构建创建登录页面的应用程序,并根据different pages in Shiny App
中提到的用户加载不同的页面我的问题是,根据用户的不同,我想加载不同的RData源。因此,如果用户loged是Admin我想加载data_ADMIN.RData,或者如果用户是test,我想加载data_TEST.RData。加载的数据表用于构建我的UI并使我的应用程序运行。
这里我给你讲了一些我用过的代码:
1)管理员
admin_title="Decison Support System"
admin_side=list(sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Widgets", tabName = "widgets", icon = icon("th"))
))
admin_main=list(
tabItems(
tabItem(tabName = "dashboard", list(h1("1234"),h2("234"))),
tabItem(tabName = "widgets", list(fluidRow(column(6,numericInput("inputtest", "test", value = 0),column(6,actionButton(inputId ="test1",label ="go")))))
)
))
2)Test.R
test_title="Decison Support System"
test_side=list(sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))))
test_main=list(
tabItems(
tabItem(tabName = "dashboard", list(h1("user"),h2("user")))
))
3)ui.R
library(shiny)
library(shinydashboard)
shinyUI(
dashboardPage(
dashboardHeader( title=textOutput("title")),
dashboardSidebar(uiOutput("side")),
dashboardBody(
uiOutput("page")
)
)
)
4)
library(shiny)
library(shinydashboard)
source("user.R")
source("admin.R")
my_username <- c("test","admin")
my_password <- c("test","123")
get_role=function(user){
if(user=="test") {
return("TEST")
}else{
return("ADMIN")
}
}
get_ui=function(role){
itog=list()
if(role=="TEST"){
itog$title=test_title
itog$main=test_main
itog$side=test_side
return(itog)
}else{
itog$title=admin_title
itog$main=admin_main
itog$side=admin_side
return(itog)
}
}
shinyServer(function(input, output,session) {
USER <- reactiveValues(Logged = FALSE,role=NULL)
ui1 <- function(){
tagList(
div(id = "login",
wellPanel(textInput("userName", "Username"),
passwordInput("passwd", "Password"),
br(),actionButton("Login", "Log in")))
,tags$style(type="text/css", "#login {font-size:10px; text-align: left;position:absolute;top: 40%;left: 50%;margin-top: -10px;margin-left: -150px;}")
)}
observe({
if (USER$Logged == FALSE) {
if (!is.null(input$Login)) {
if (input$Login > 0) {
Username <- isolate(input$userName)
Password <- isolate(input$passwd)
Id.username <- which(my_username == Username)
Id.password <- which(my_password == Password)
if (length(Id.username) > 0 & length(Id.password) > 0) {
if (Id.username == Id.password) {
USER$Logged <- TRUE
USER$role=get_role(Username)
}
}
}
}
}
})
observe({
if (USER$Logged == FALSE) {
output$page <- renderUI({
box(
div(class="outer",do.call(bootstrapPage,c("",ui1()))))
})
}
if (USER$Logged == TRUE) {
if(USER$role=="ADMIN"){
load("data_ADMIN.RData")
}else{
load("data_TEST.RData")
}
itog=get_ui(USER$role)
output$title<- renderText({
itog$title
})
output$side <- renderUI({
itog$side
})
output$page <- renderUI({
itog$main
})
}
})
})
这只是复制我发现的示例,但是在我的原始代码中添加了加载数据部分,在服务器端之后,我拥有了用于在UI中显示RData中包含的数据表的所有函数根据用户的不同而不同的文件。 在我运行应用程序时的原始代码中,我得到错误data_table not found(这是我调用的数据表的名称)。
我该如何解决?如果您需要更多特定脚本,请告诉我们!
艾达