R 如何使用具有链接输出的外部列

R 如何使用具有链接输出的外部列,r,shiny,R,Shiny,我有一个非常简单的闪亮应用程序,你可以在下面运行。它链接了输入,因此当您更改“部门”输入时,“Displayname”将由该部门的人员填充。我需要从数据库中获取所选“DisplayName”的数据。因此,如果选择了部门A&Frank,我需要获取Frank的数据,但我无法将显示名称传递给数据库。幸运的是,我可以传递“NameToPassToDatabase”,但如何访问相应的“NameToPassToDatabase” 在下面的示例中,我没有将名称传递给数据库,而是将其传递给RenderText,

我有一个非常简单的闪亮应用程序,你可以在下面运行。它链接了输入,因此当您更改“部门”输入时,“Displayname”将由该部门的人员填充。我需要从数据库中获取所选“DisplayName”的数据。因此,如果选择了部门A&Frank,我需要获取Frank的数据,但我无法将显示名称传递给数据库。幸运的是,我可以传递“NameToPassToDatabase”,但如何访问相应的“NameToPassToDatabase”

在下面的示例中,我没有将名称传递给数据库,而是将其传递给RenderText,并在屏幕上打印

比如说

如果选择部门A&Frank,我想打印“FG”

如果选择部门B和账单,我想打印“BU”

如果选择部门C&TOM,我想打印“TT”

require(闪亮)

数据您只需在部门和名称上建立索引,然后返回
NameToPassToDatabase
。注意,我为部门C添加了一个额外的名称,以证明您将返回有关名称和部门的正确代码

datas <- data.frame(Department = c("dept a", "dept b", "dept c", "dept c"), 
                DisplayName = c("Frank","Bill","Tom","Frank"), 
                NameToPassToDatabase = c("FG","BU","TT","FC"))



runApp(list(
    ui = basicPage(
        sidebarPanel(
            selectInput("Department", "Select a department", 
                        choices = levels(datas$Department), 
                        selected = levels(datas$Department)[1]),
            uiOutput("DisplayName")
        ),
        mainPanel(textOutput("Text") )
    ),
    server = function(input, output, session) {


        output$DisplayName<-renderUI({
            Department <- input$Department
            print(Department)
            selectInput("DisplayName", 'DisplayName:', 
                        choices = as.character(datas$DisplayName[datas$Department == Department]), 
                        selected = as.character(datas$DisplayName[datas$Department == Department][1]))
        })


        output$Text <- renderText({
            print("in render text")
            nameToDB <- as.character(
                datas[datas$DisplayName == input$DisplayName & 
                          datas$Department == input$Department,3])         
            return(nameToDB)         
        })

    }
))

datas我的答案解决了你的问题还是你在寻找别的?
datas <- data.frame(Department = c("dept a", "dept b", "dept c", "dept c"), 
                DisplayName = c("Frank","Bill","Tom","Frank"), 
                NameToPassToDatabase = c("FG","BU","TT","FC"))



runApp(list(
    ui = basicPage(
        sidebarPanel(
            selectInput("Department", "Select a department", 
                        choices = levels(datas$Department), 
                        selected = levels(datas$Department)[1]),
            uiOutput("DisplayName")
        ),
        mainPanel(textOutput("Text") )
    ),
    server = function(input, output, session) {


        output$DisplayName<-renderUI({
            Department <- input$Department
            print(Department)
            selectInput("DisplayName", 'DisplayName:', 
                        choices = as.character(datas$DisplayName[datas$Department == Department]), 
                        selected = as.character(datas$DisplayName[datas$Department == Department][1]))
        })


        output$Text <- renderText({
            print("in render text")
            nameToDB <- as.character(
                datas[datas$DisplayName == input$DisplayName & 
                          datas$Department == input$Department,3])         
            return(nameToDB)         
        })

    }
))