2017-12-13 7 views
1

Angenommen, ich habe einen Datenrahmen namens summarized, der unter anderem die Spalten TY_COMP und LY_COMP enthält. Ich könnte eine Funktion in R schreiben, die eine Berechnung auf TY_COMP und LY_COMP führt und erstellt eine neue Spalte cac im Datenrahmen wie folgt aufgerufen:R Shiny: Erstellen neuer Spalten innerhalb eines reaktiven Datenrahmens

summarized$cac <- summarized$TY_COMP/summarized$LY_COMP-1 

cac ist jetzt eine neue Spalte in dem Datenrahmen zusammengefasst.

Jetzt sagen, dass summarized() ein reaktiver Datenrahmen mit den gleichen Spalten ist.

Wie konnte ich den Effekt erzielen, der im nicht-reaktiven Datenrahmen gemacht wurde, d. H. Eine neue Spalte innerhalb des aktuellen Rahmens erstellen? Oder wie würde ich den gleichen Effekt erzielen?

Ich habe versucht:

summarized$cac <- reactive({summarized()$TY_COMP/summarized()$LY_COMP-1}) 

Antwort

0

Ich rechne damit Sie einen reactive ändern möchten, wenn zum Beispiel ein actionButton geklickt wird. Zu diesem Zweck würde ich reactiveValues verwenden. Sie können reactiveValue innerhalb von Beobachtern wie observe oder observeEvent ändern.

Schauen Sie sich dieses einfache Beispiel:

summarized <- data.frame(id = 1:20, group = letters[1:4], TY_COMP = runif(20), LY_COMP = runif(20)) 

library(shiny) 

ui <- fluidPage(
    verbatimTextOutput("text"), 
    actionButton("btn", "Add the 'cac' column to summarized") 
) 

server <- function(input, output){ 
    rv <- reactiveValues(summarized = summarized) 

    output$text <- renderPrint(rv$summarized) 

    observeEvent(input$btn, { 
    rv$summarized$cac <- summarized$TY_COMP/summarized$LY_COMP - 1 
    }) 

    summarized_mod <- reactive({ 
    summarized()$TY_COMP/summarized()$LY_COMP-1 
    }) 
} 

shinyApp(ui, server) 

Eine andere Möglichkeit wäre eine weitere reactive zu schaffen, die eine zusätzliche Spalte hat. Dies ist möglich, aber abhängig von Ihrem Anwendungsfall empfehle ich die erste Lösung.

Beispiel:

summarized <- data.frame(id = 1:20, group = letters[1:4], TY_COMP = runif(20), LY_COMP = runif(20)) 

library(shiny) 

ui <- fluidPage(
    verbatimTextOutput("text1"), 
    verbatimTextOutput("text2") 
) 

server <- function(input, output){ 

    output$text1 <- renderPrint(summarized_orig()) 
    output$text2 <- renderPrint(summarized_mod()) 


    summarized_orig <- reactive({ 
    summarized 
    }) 

    summarized_mod <- reactive({ 
    df <- summarized_orig() 
    df$cac <- summarized_orig()$TY_COMP/summarized_orig()$LY_COMP - 1 

    df 
    }) 
} 

shinyApp(ui, server) 
Verwandte Themen