2015-01-29 5 views
1

오히려 시간이 많이 소요되는 분석이있는 경우 모델을 일부 데이터 세트에 맞추어 보겠습니다. renderPlot(), renderTable(), renderText() 등이있을 것이라고 말하면서 모델 피팅의 모든 출력을 표시하고 싶습니다. 내 현재 코드는 다음과 같습니다R shiny - 동일한 분석을 위해 여러 출력 렌더링

위의 예에서
shinyServer(function(input, output,session) { 

output$twang_diagplot <- renderPlot({ 

if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL) 

else{ 
    formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+')) 

    ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE) 

    plot(ps_fit) 
} 
}) 

output$twang_summary <- renderPrint({ 

if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL) 

else{ 
    formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+')) 

    ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE) 

    ps_balance <- bal.table(ps_fit) 

    print(ps_balance) 
} 
}) 
}) 

, 내가 별도로 줄거리 및 요약을 생성하기 위해 두 번 PS() 함수를 호출했다. 이것은 매우 비효율적입니다. 내가 respond() 또는 observe()와 같은 함수를 사용해야한다는 것을 알고 있습니다. ps() 함수를 호출 한 후에 두 렌더링 함수를 함께 래핑하는 데 사용할 수는 있지만 사용법은 확실하지 않습니다. 도움을 주셔서 감사합니다. 관련

shinyServer(function(input, output,session) { 
getPsFit <- reactive({ 
formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+')) 
ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE) 
ps_fit 
}) 
output$twang_diagplot <- renderPlot({ 
if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL) 

else{ 
ps_fit <- getPsFit() 
plot(ps_fit) 
} 
}) 

output$twang_summary <- renderPrint({ 

if(is.null(data())|input$twang_x=='.'|input$twang_y=='.') return(NULL) 

else{ 
ps_fit <- getPsFit() 

ps_balance <- bal.table(ps_fit) 

print(ps_balance) 
} 
}) 
}) 

답변

3
그것은 다른 인수를 사용하는 ps()에 두 통화처럼 보이는, 그래서 ps 두 번 호출해야하기 때문에 한 번만 호출됩니다이 경우 반응성을 사용할 수 있습니다 모르겠어요

, 나는 그 주위에 방법을 볼 수 없습니다 ...

추신. 이 같은 Shiny tutorial, specifically the section of reactive expressions?
뭔가 지금

getPsFit <- reactive({ 
    formula <- paste(input$twang_y, "~",paste(input$twang_x,collapse='+')) 
    ps_fit <- ps(as.formula(formula),data=workdata(),verbose=FALSE) 
    ps_fit 
}) 

작동합니다
당신이 읽게 코드는 훨씬 더 읽기 :

편집 귀하의 코멘트 이후 수 있도록 좀 더 간격 혜택을 누릴 수 있습니다 답장을 보내 주셔서 감사합니다. 두 문장 모두에있는 두 줄의 코드를 ps_fit <- getPsFit()

+0

으로 바꿔 주시면 감사하겠습니다. 사실 내 두 ps()는 동일한 인수를 사용할 수 있습니다. 이 경우 어떻게하면 두 개의 렌더링 출력을 래핑하기 위해 reactive()를 사용할 수 있습니까? –

+0

안녕하세요, 위의 코드를 살펴볼 수 있습니까? 이게 뭔가? 하지만 getPsFit() 함수는 여전히 두 번 호출되는 것 같습니다. 추신 : 튜토리얼을 읽었지만 제대로 작동하지 않는 것 같아서 어쩌면 올바른 방법으로하지 않을 것이라고 생각합니다. –

+0

'getPsFit'는 종속성 중 하나가 변경 될 때마다 실행됩니다. 그것은 두 개의 의존성 ('$ twang_x 입력과'$ twang_y')을 가지므로 입력 변경마다 한 번씩 두 번 호출 될 수 있습니다. 그게 문제라면, 그게'actionButton'으로 해결할 수 있습니다. –