2017-12-13 4 views
1

summarizedというデータフレームには、TY_COMPLY_COMPなどのデータフレームがあります。R Shiny:リアクティブデータフレーム内に新しい列を作成

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

cacは今、要約されたデータフレームの新しい列です:私はこのようなデータフレームにcacと呼ばれる新しい列をTY_COMPLY_COMP上の計算を実行し、作成Rで関数を書くことができます。

ここで、summarized()は同じ列を持つ反応的なデータフレームです。

非反応性データフレームで行われた効果、つまり現在のフレーム内に新しい列を作成するにはどうすればよいですか?または、私はどのように同じ効果を得るでしょうか?

私が試した:

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

答えて

0

私はあなたが、たとえばactionButtonがクリックされたときにreactiveを変更したい数えます。この目的のために、reactiveValuesを使用します。あなたはobserveまたはobserveEventのようなオブザーバ内のreactiveValueを変更することができます。

この単純な例をチェックアウト:

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) 

別のオプションは、追加の列を持っている別のreactiveを作成することです。これは使用できますが、ユースケースによっては、最初の解決策をお勧めします。

例:

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) 
関連する問題