2017-12-13 11 views
1

TY_COMPLY_COMP 등이 포함 된 데이터 프레임 summarized이 있다고 가정 해보십시오.R Shiny : 반응 형 데이터 프레임 내에서 새 열 만들기

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

cac 이제 요약 데이터 프레임의 새로운 열이다 I는 다음과 같이 데이터 프레임 cac라는 새로운 항목을 TY_COMPLY_COMP에 대한 계산을 수행하여 생성 R의 함수를 작성할 수있다.

이제 summarized()은 동일한 열을 가진 반응적인 데이터 프레임입니다.

반응이없는 데이터 프레임에서 효과를 얻으려면 어떻게해야합니까? 즉, 현재 프레임 내에 새로운 열을 만드시겠습니까? 또는 같은 효과를 얻으려면 어떻게해야합니까?

내가 시도 :

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

답변

0

난 당신이 예를 들어 actionButton을 클릭 할 때 reactive을 수정할 생각한다. 이 목적을 위해 나는 reactiveValues을 사용할 것이다. 옵저버 내부의 reactiveValueobserve 또는 observeEvent과 같이 수정할 수 있습니다. 이 간단한 예제 밖으로

점검 :

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)