2017-12-16 24 views
0

このDataTableはShinyにあり、行をクリックすると可変テキストボックスの最初の列から値を取得したいと考えています。 Shiny DataTableのセルから値を取得

Screenshot here

だからスクリーンショットに見られるように、この場合には、私はこの行をクリックすると、私は今 Error: object of type 'closure' is not subsettableある場所で Factuur Factuurを取得したいと思います。 私は行番号を取得するために管理:

UI: p(verbatimTextOutput('chauffeurdetails'))

サーバー: output$chauffeurdetails = renderText ({ chauffeurdetail = input$results_rows_selected })

誰もが私が代わりにのみ行の最初の列から値を取得することができるかと思いました数?

全体のRコード:

# install packages if needed 
if (!require("DT")) install.packages("DT") 
if (!require("tidyr")) install.packages("tidyr") 
if (!require("dplyr")) install.packages("dplyr") 
if (!require("readxl")) install.packages("readxl") 
if (!require("shiny")) install.packages("shiny") 
if (!require("expss")) install.packages("expss") 

# activate packages 
library("tidyr") 
library("dplyr") 
library("readxl") 
library("DT") 
library("shiny") 
library("expss") 

# Lees MI bestand 
MIinport <- read_excel("~/Documents/MI.xlsx", col_types = c("skip", "skip", "text", "skip", "text", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "text", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "text","skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "text","skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip", "skip")) 
# Hernoem kolommen 
MIinport <- unite(MIinport, KlantRef, Klant, Referentie, sep=" | ", remove = TRUE) 
colnames(MIinport)<- c("Chauffeur", "Kenteken", "Klant", "ARDNK") 
# Filter locatiewerk 
MIinport <- subset(MIinport, is.na(MIinport$Kenteken)) 
MIinport$Kenteken <- NULL 

DNK <- subset(MIinport, ARDNK == "DNK") 
DNK$ARDNK <- NULL 
AR <- subset(MIinport, ARDNK == "AR") 
AR$ARDNK <- NULL 

DNKfreq1 <- ftable(DNK$Chauffeur, DNK$Klant, dnn = c("Chauffeur", "Klant")) 
DNKfreq2 <- as.data.frame(DNKfreq1) 
DNKdata <- subset(DNKfreq2, Freq>0) 
colnames(DNKdata)<- c("Chauffeur", "Klant", "Aantal") 
list.DNKklanten <- as.list(unique(sort(DNKdata$Klant))) 

ARfreq1 <- ftable(AR$Chauffeur, AR$Klant, dnn = c("Chauffeur", "Klant")) 
ARfreq2 <- as.data.frame(ARfreq1) 
ARdata <- subset(ARfreq2, Freq>0) 
colnames(ARdata)<- c("Chauffeur", "Klant", "Aantal") 
list.ARklanten <- as.list(unique(sort(ARdata$Klant))) 

# Onderscheid studenten - FALSE = Student | TRUE = Senior 
ARdata$Student <- as.numeric(grepl('[.]', ARdata$Chauffeur)) 
ARstudent <- subset(ARdata, Student == 0) 
ARstudent$Student <- NULL 
ARdata$Student <- NULL 


# App 
library(shiny) 

ui <- basicPage(
    p (""), 
    sidebarLayout(
    sidebarPanel(
     div(
     h3("Zoek instellingen"), 
     uiOutput("chooselist"), 
     checkboxInput("StudentOption", label = "Alleen studenten", value = FALSE), 
     radioButtons("ARofDNK", label = "AR of DNK", choices = c("AR", "DNK"), selected = "AR", inline = TRUE) 
    ), 
    div(tags$hr(), 
     h3("Chauffeur details"), 
     p(textOutput('chauffeurdetails')))), 

    mainPanel(
     DT::dataTableOutput("results") 
    ) 
) 
) 
server <- function(input, output, session) { 
# update datatable 
output$chooselist <- renderUI({ 
    if (input$ARofDNK == "AR"){ 
    tagList(
    selectInput("select", "Selecteer een klant", choices = c(" ", list.ARklanten)) 
    ) 
    } else { 
    tagList(
    selectInput("select", "Selecteer een klant", choices = c(" ", list.DNKklanten)) 
    ) 
    } 
    }) 
    output$value <- renderPrint({ input$ARofDNK }) 

    SelectedKlant <- reactive({ 
    if (input$StudentOption == TRUE & input$ARofDNK == "AR") { 
     a <- subset(ARstudent, (ARstudent$Klant == input$select)) 
     return(a) 
    } 
    else if (input$StudentOption == FALSE & input$ARofDNK == "AR") { 
     a <- subset(ARdata, (ARdata$Klant == input$select)) 
     return(a) 
    } else if (input$ARofDNK == "DNK"){ 
     a <- subset(DNKdata, (DNKdata$Klant == input$select)) 
     return(a) 
    } 
}) 

    output$results <- DT::renderDataTable(SelectedKlant(), options = list(pageLength = 20, dom = 'tip', order = list(2,'desc')), rownames = FALSE, width = 500, elementId = "results", colnames=c('Naam', 'Locatie', 'Aantal'), selection = 'single') 

# output$chauffeurdetails = renderText ({ 
# SelectedKlant()[input$results_rows_selected,1] 
# }) 

    output$chauffeurdetails = renderText ({ 
    req(length(input$results_rows_selected)>0) 
    SelectedKlant()[input$results_rows_selected,1] 
    }) 

# output$chauffeurdetails = renderText ({ 
#  chauffeurdetail = input$results_rows_selected 
# }) 

    session$onSessionEnded(function() { 
    stopApp() 
    }) 
    session$on 

    } 

# Run the application 
shinyApp(ui = ui, server = server, options = list(launch.browser=TRUE)) 

編集: 例データ:https://www.dropbox.com/s/zjxusxcan0ps1s3/Input%20Test.xlsx?dl=0 これらのデータは、プライバシー、機密情報が含まれているので、私は小さな交換を作成しました。

+0

エラーを出すコードを投稿できますか? – SBista

+0

@SBista上記のコードは動作しており、行番号を示しています。私はあなたが 'ARstudent試すことができARstudent'があなたのデータセットである'と仮定すると、全体の光沢のあるコード – George

+0

@SBista [入力$ results_rows_selectedを、1] ' – George

答えて

0

output$chauffeurdetails = renderText ({ SelectedKlant()[input$results_rows_selected,1] })

それを解決する必要があります。

あなたの最後の問題は、古典的なstringAsFactorだったと最初の列は、我々がここにas.character()

で文字に変換する必要がありファクタ、そこのためだったことをサーバーコード

server <- function(input, output, session) { 
    # update datatable 
    output$chooselist <- renderUI({ 
    if (input$ARofDNK == "AR"){ 
     tagList(
     selectInput("select", "Selecteer een klant", choices = c(" ", list.ARklanten)) 
    ) 
    } else { 
     tagList(
     selectInput("select", "Selecteer een klant", choices = c(" ", list.DNKklanten)) 
    ) 
    } 
    }) 
    output$value <- renderPrint({ input$ARofDNK }) 

    SelectedKlant <- reactive({ 
    if (input$StudentOption == TRUE & input$ARofDNK == "AR") { 
     a <- subset(ARstudent, (ARstudent$Klant == input$select)) 
     return(a) 
    } 
    else if (input$StudentOption == FALSE & input$ARofDNK == "AR") { 
     a <- subset(ARdata, (ARdata$Klant == input$select)) 
     return(a) 
    } else if (input$ARofDNK == "DNK"){ 
     a <- subset(DNKdata, (DNKdata$Klant == input$select)) 
     return(a) 
    } 
    }) 

    output$results <- DT::renderDataTable(SelectedKlant(), options = list(pageLength = 20, dom = 'tip', order = list(2,'desc')), rownames = TRUE, width = 500, elementId = "results", colnames=c('Naam', 'Locatie', 'Aantal'), selection = 'single') 

    # output$chauffeurdetails = renderText ({ 
    # SelectedKlant()[input$results_rows_selected,1] 
    # }) 

    output$chauffeurdetails = renderText ({ 
    req(length(input$results_rows_selected)>0) 
    as.character(SelectedKlant()[input$results_rows_selected,1]) 
    }) 

    # output$chauffeurdetails = renderText ({ 
    #  chauffeurdetail = input$results_rows_selected 
    # }) 

    session$onSessionEnded(function() { 
    stopApp() 
    }) 
    session$on 

} 
の作業バージョンです

これが役立つことを願っています!

+0

今、私は乱数を得ました。あなたの調整のほかに、UIの 'verbatimTextOutput'を' TextOutput'に変更しました。そうでなければ、全く機能しませんでした。何かご意見は? – George

+0

こんにちは@George私は実際の例を追加しました。これがうまく行かない場合は、より多くの情報が必要であり、作業しているサンプルデータのほうが望ましいです。私は小さなサンプルをenougthする必要があります。 –

+0

@Berlin Baron、私は試みましたが、残念ながら、私はまだ反応として数字を受け取ります。要求に応じて、私は開始のポストにサンプル文書を投稿しました。私はあなたが見たものを再現できることを願っています。代わりにコード全体を削除しました。理解するのに役立ちます。 – George

関連する問題