2014-05-22 5 views
0

일반적인 질문이지만 미안하지만. Shree UI에 파일 저장을 트리거하는 actionButton을 추가해야합니다. 실제 파일 저장 명령은 tabPanel의 어느 탭이 열려 있는지에 따라 달라지며 tabPanel id를 통해 해당 정보를 가져올 수 있습니다. 내가 겪고있는 문제는 actionButton의 상태에 액세스하여 나중에 다시 설정하는 것입니다.R의 입력 변수에 액세스하고 변경하는 방법 Shiny server.r

shinyUI(fluidPage(
    titlePanel("myTitle"), 

    sidebarLayout(
     sidebarPanel("", 
      actionButton("save", "Save File"), 

      # test to make sure the button is working 
      verbatimTextOutput("sb") # it increments when clicked 
     ) 
    ) 
)) 

server.r에서, 나는이 할 노력하고있어 : ui.r에서

, 나는 이런 일이 물론

shinyServer(function(input, output) { 

    # test to make sure the button is working 
    output$sb <- renderPrint({ input$save })  # increments when clicked 

    # here is the problem code: 
    if(input$save > 0) {       # button was clicked, so... 
     input$save <- 0       # reset the flag 
     print("HERE")       # and do something else 
    } 
}) 

을, 나는을 확인합니다 "여기"를 인쇄하는 대신 tabPanel의 상태를 확인하십시오.이 문제가 발생하면 다른 질문이 생길 수 있습니다. server.r 코드에서 $ save 입력 값을 액세스하고 변경하려면 어떻게합니까? if() 조건문 내부의 코드가 실행되고 있다는 증거는 없으므로 버튼을 클릭 할 때마다 입력 $ save의 값이 증가하더라도 논리 테스트가 수행되지 않았거나 FALSE를 반환한다고 가정합니다.

어떤 조언을 주셔서 감사합니다. 아마 분명 하듯이, 나는 Shiny에게 매우 익숙하며, 지금까지는 그것을 불투명하게 찾았다.

보다도, --Mike C.

답변

0

당신이 shinyServer를 시작할 때 나는 그 코드는 한 번만 실행지고 같은데요. 모델 변경을 실행하려면 reactive 블록 안에 있어야한다고 생각합니다. 그렇지 않으면 코드 블록이 다시 평가되지 않습니다.

4

입력이 변경 될 때마다 코드를 재실행해야한다면 지금은 if처럼 서버 기능 안에있을 수 없습니다. 당신은 관찰 블록 내부에 그것을 넣어해야합니다

observe({ 
    if (input$save == 0) 
    return() 

    isolate({ 
    # Do your saving in here 
    }) 
}) 

당신은 절대적으로 $ 내가 그렇게 진심으로 내가 특별히 프레임 워크에서 그 능력을 떠났다 있다고 생각 0으로 저장 입력 값을 재설정 할 필요가 없습니다. input$save의 실제 값은 값 0을 제외하고는 의미가 없습니다. 단순히 "버튼을 절대로 클릭하지 않았습니다."라는 의미입니다. 다른 모든 값에 대해 값 자체는 중요하지 않으며 단지 변경된 값입니다. # Do your saving in here 행에 도달 할 때마다 사용자가 저장 버튼을 클릭했음을 의미합니다. 클릭 한 시간이 첫 번째인지 100 번째인지 여부는 중요하지 않습니다. 사실 사용자가 방금 클릭 했으므로 이제 저장해야합니다.

관련 문제