2017-07-28 1 views
0

Si je mets un élément est fonction réactive que j'ai besoin d'eux plus bas le code Comment pourrais-je les rappeler, exemple:l'accès aux éléments à l'intérieur d'une fonction réactive

 library(shiny) 
library(data.table) 
library(formattable) 
library(tables) 
ui <- fluidPage(
     fileInput(inputId = "File",label = "Upload file...",accept=c("zip","text")), 
     tableOutput("AEP") 
) 


server <- function(input, output){ 
    options(shiny.maxRequestSize=50*1024^2) 
    #output$AEP <- renderTable({ 
    data1 <- reactive({ 
    infile=input$File 

    if (is.null(infile)) 
     return(NULL) 

    report_list <- c("Park result.txt", 
        "Park result minus", 
        "Park result plus") 
    temp_files <- unzip(infile$datapath) 
    temp_files <- temp_files[grepl(paste(report_list, collapse = "|"), temp_files)] 

    T=length(temp_files) 
    t1=3*c(1:(T/3)) 

    t2=c(1:T) 
    t2=t2[-t1] 
    p=c();for(i in 1:T){p[[i]]=c()} 
    for(i in 1:(length(t1))){p[[t1[i]]]=read.table(temp_files[t1[i]],skip=1,sep=";")} 
    for(i in 1:(length(t2))){p[[t2[i]]]=read.table(temp_files[t2[i]],skip=2,sep=";")} 
    Installed_Power=v=park=c();for(i in 1:T/3){park[[i]]=v[[i]]=c()} 

    for(i in 1:(T/3)){ 
     park[[i]]=as.matrix(cbind(p[[1+(i-1)*3]],p[[2+(i-1)*3]],p[[3+(i-1)*3]])) 
    } 
    #Power output : 
    y=c();for(i in 1:T/3){y[[i]]=c()} 
    power=Ave.A=Ave.k=AD=c() 
    for (i in 1:(T/3)){ 


     y[[i]]=park[[i]][,153][3:length(park[[i]][,153])] 
     y[[i]]=gsub("\\,","",y[[i]]) 
     y[[i]]=as.numeric(y[[i]]) 
     power[i]=sum(y[[i]])/1000 
     Ave.A[i]=mean(as.numeric(park[[i]][3:length(park[[i]][,162]),162])) 
     Ave.k[i]=mean(as.numeric(park[[i]][3:length(park[[i]][,163]),163])) 
     AD[i]=mean(as.numeric(park[[i]][3:length(park[[i]][,200]),200])) 
    } 
    }) 
    output$AEP <- renderTable({ 
    df <- data1() 
    df <-as.data.frame(df) 
    AEP=data.table(df$power,df$Ave.k,df$Ave.A,df$AD) 
    }) 

} 
shinyApp(ui=ui, server=server) 

maintenant j'ai reac(), comme fonction réactive. Que faire si dans une autre fonction réactive ou de rendu j'ai juste besoin de T valeur? puis-je y accéder par $ comme reac()$ T ?? Le code mentionné ci-dessus renvoie l'erreur:

Warning: Error in data.table: column or argument 1 is NULL 
code

fonctionne Si je ne pas utiliser la fonction réactive et vient de mettre la fonction à la place rends! Je fais cela parce que j'ai besoin à la fin de télécharger le résultat en fichier pdf. (la table AEP) Aussi, que dois-je faire si je veux utiliser la table AEP dans R markdown?

Répondre

0

Vous pouvez toujours définir reac() comme une image dans une autre fonction réactive ou de rendu.

Essayez:

output$table <- renderTable({ 
    df <- reac() 
    df <- as.data.frame(df) 
    df$T 
}) 
+0

Cela ne fonctionne pas: Avertissement: Erreur dans data.table: la colonne ou l'argument 1 est NULL –

1

Cet exemple montre comment reproductible la trame de données réactive est accessible comme tout autre trame de données dans une application brillante. Sans être capable de reproduire la question, il est difficile de dire ce qui se passe vraiment avec votre application.

library(shiny) 

ui <- fluidPage(
    titlePanel("Test Reactive Dataframe"), 
    mainPanel(textInput("test", "EnterTextHere"), 
      tableOutput("test1"), 
      tableOutput("test2") 
) 
) 

server <- function(input, output) { 

    df1 <- reactive({ 
    data.frame(id = 1:length(input$test), input = input$test) 
    }) 

    output$test1 <- renderTable({ 
    df1()$input 
    }) 

    output$test2 <- renderTable({ 
    df1()[,1:2] 
    }) 

} 

shinyApp(ui = ui, server = server)