2017-11-15 12 views
-1

데이터에 따라 다양한 수의 플롯을 렌더링하고 싶습니다. ui의 데이터에 액세스하여 데이터를 기반으로 복수 plotOutput 통화를 동적으로 생성 할 수 있습니까? 나는 서버에서 할 수처럼(Shiny R) UI에서 여러 출력을 동적으로 생성하는 방법은 무엇입니까?

shinyApp(
    ui <- fluidPage(
    lapply(WHAT I WANT TO ACCESS, function(patient) { 
     fluidRow(column(1, tags$p(patient)), 
       column(11, lapply(unique(newDT[pat == patient]$clinic), 
        function(clinic){ 
        fluidRow(column(1, tags$p(clinic)), 
          column(10, plotOutput(outputId = paste(patient, clinic), height = "100%"))) 
        }))) 

    }) 
), 

    server <- function(input, output) { 

    newDT2 <- reactive({ 
     newDT[dx.x == input$dx] 
    }) 

    #WHAT I WANT TO ACCESS IN UI 
    pats <- unique(newDT2()$pat) 

    x <-reactive({max(newDT2()$dat) +0.5}) 
    #observe({print(x())}) 

    PLOT 
    }) 
     } 
    }) 
    } 
    } 
) 

그러나, 나는 UI의 데이터 프레임에 액세스 할 수 있습니다 : 예를 들어

우리는이 코드가있는 경우. 해결 방법이 있습니까?

TIA!

답변

0

server에있는 모든 데이터 처리를 수행하고 출력을 ui으로 되돌려 보내야합니다.

당신의 예에서

, 당신은 renderUI 호출 서버에 lapply 전화를 걸 것하고 ui에 그 자리에 uiOutput을 넣어.

다음은 반짝 반짝 빛나는 앱의 예입니다.

# dynamically creates a numeric input for each activity in the activities table 
    # for the PAL helper panel 
    output$activityList <- renderUI({ 
     act <- split(as.character(activities[order(activities$Sort, activities$Activity), 
              "Activity"]), 
        cut2(1:nrow(activities), g=3)) 
     div(class = "sidebyside", 
      fluidRow(column(4,lapply(as.character(act[[1]]), 
          function(x) {numericInput(x,x, value = 0, step=0.5, min = 0)})), 
        column(4,lapply(as.character(act[[2]]), 
          function(x) {numericInput(x,x, value = 0, step=0.5, min = 0)})), 
        column(4,lapply(as.character(act[[3]]), 
          function(x) {numericInput(x,x, value = 0, step=0.5, min = 0)})) 
        ) 
     ) 

}) 

그리고 UI에서 :

uiOutput("activityList") 
서버에서