2017-04-04 5 views
1

Ich habe eine glänzende App eingerichtet, die auf den ausgewählten Daten basiert. Der generierte Bericht muss eine eindeutige ID aufweisen, auf die in Besprechungen verwiesen wird. Ich verstehe, dass ich die Sitzungs-ID verwenden kann, aber ich brauche eine Möglichkeit, die Downloads pro Sitzung zu zählen. Gibt es eine Möglichkeit, Ereignisse außerhalb von Sitzungen zu zählen oder die Anzahl der Sitzungs-IDs seit der ersten Bereitstellung zu zählen?download count in shinyapps.io

+0

was –

+0

Entschuldigung für die Rechtschreibung, die ich meinte [https://www.shinyapps.io/](https://www.shinyapps.io/) –

+0

Oh, ich wusste nicht, dass das auf dieser Website ausgeführt wurde. Das hat wahrscheinlich etwas mit der Doppelzählung zu tun. –

Antwort

1

Ich musste das einmal tun, also hatte ich etwas Code herumliegen. Es hat im Grunde alles in einem csv, dem ich angehängt habe, im Auge behalten. Hier habe ich es in eine glänzende Testplattform eingebaut.

  • es die session$token für die ID verwendet (vielleicht gibt es etwas besser)
  • es verwendet write.table und read.table weil sie mit der append Option besser verhalten.
  • es erhöht die Zählung um in dem glänzenden Download-Handler writetolog rufen aber Sie können auch die Zählung manuell mit einer zusätzlichen Taste erhöhen (was natürlich nur zu Testzwecken sind)
  • Es zwei Ausgang hat, eine Zusammenfassung ist des Logs ist der andere ein Dump dessen, was im Log steht. Diese sind für das Debuggen, da die downloadHandler manchmal etwas "herausfordernd" sein kann, wenn man mit all dieser Reaktivität interagiert.

Hier ist der Code geändert ein Beispiel sein, wie über das, was Sie brauchen:

library(shiny) 

logfname <- "log.csv" 
writetolog <- function(newcount,newsessionid,operation){ 
    time <- format(Sys.time(), "%Y-%m-%d %H:%M:%S %Z") 
    df <- data.frame(time=time,count=newcount,sessionid=newsessionid,operation=operation) 
    doappend <- file.exists(logfname) 
    if (doappend){ 
    write.table(df,logfname,append=T,quote=F,col.names=F,sep=",",row.names=F) 
    } else { 
    write.table(df,logfname,append=F,quote=F,sep=",",row.names=F) 
    } 
} 
getcounts <- function(){ 
    if (!file.exists(logfname)){ 
    return(list(count=0,sessioncount=0)) 
    } 
    df <- read.table(logfname,header=T,sep=",") 
    nr <- nrow(df) 
    rlst <- list(count=sum(df$count),sessioncount=length(unique(df$sessionid)),          
       lastop=df$operation[nr],lasttime=df$time[nr]) 
    return(rlst) 
} 

ui <- fluidPage(
    titlePanel("Keep a download log"), 
    sidebarLayout(
    sidebarPanel(
     actionButton("inccount","Increment Count"), 
     actionButton("getcount","Refresh Summary"), 
     actionButton("showlog","Show Log"), 
     downloadButton("dodownload", "Save to .csv") 
    ), 
    mainPanel(
     h2("Summary of Download Log"), 
     verbatimTextOutput("showcount"), 
     h2("Dump of Download Log"), 
     verbatimTextOutput("loglog") 
    ) 
) 
) 

server <- function(input, output,session) { 
    observeEvent(input$inccount,{ 
    print("writetolog") 
    writetolog(1,session$token,"inc count") 
    }) 

    output$showcount <- renderPrint({ 
    input$getcount 
    rv <- getcounts() 
    time <- format(Sys.time(), "%Y-%m-%d %H:%M:%S %Z") 
    print(sprintf("%s - count:%d sessioncount:%d",time,rv$count,rv$sessioncount)) 
    }) 
    output$loglog <- renderPrint({ 
    input$showlog 
    if (!file.exists(logfname)) return(NULL) 
    ldf <- read.csv(logfname) 
    print(ldf) 
    }) 

    output$dodownload<-downloadHandler(  
    filename = function() { 
     paste(input$table_name, '.csv', sep='') 
    }, 
    content = function(file) { 
     write.csv(mtcars, file) 
     writetolog(1,session$token,"save file") 
    } 
) 
} 
shinyApp(ui = ui, server = server) 

Screen shot: "shinyapp.oi"

enter image description here

+0

Das Speichern der Sitzungswerte in csv macht Sinn und das Filtern nach eindeutigen IDs funktioniert perfekt für den Download-Zähler. Ich fand, dass 'downloadButton' mit dem' downloadHandler' arbeitet, aber nicht mit 'actionButton' und das 'observeEvent' nicht' downloadButton' oder 'downloadHandler'. Irgendeine Idee, wie man 'observeEvent'' downloadButton' anhört? –

+0

Vielen Dank! Funktioniert perfekt, aber es muss 'writetolog (1, Sitzung $ token) 'zweimal ausgelöst werden. Die Anzahl erhöht sich, sobald Sie auf die Schaltfläche klicken und erneut, wenn Sie auf Speichern klicken. –

+0

Sicher, rufen Sie es nicht an zwei Orten? –