2014-04-22 3 views
3

문제는 제가 GUI를 자동으로 생성 할 수 없다는 것입니다. 아이디어는 얼마나 많은 파일이 있는지보고 각 파일에 대해 Image + 버튼 세트를 생성하는 것입니다. 이 문제에 대한 해결책은 ANY R의 GUI 생성자동 GUI 생성 R 반짝 있음

에 대한 솔루션입니다.이 작업은 정적으로 수행 할 수 있으며 각 버튼과 이미지의 코드를 작성하지만 넣지는 않습니다. for 루프를 사용하거나 server.R에서 이미지를 렌더링하고 HTML로 ui.R에 전달합니다. 나는 아래에서 설명 할 것이다.

내가 생성 할 코드는 다음과 같습니다 나에게 100 × 100 클릭 가능한 이미지를 제공

actionButton("sug1",icon=imageOutput("sug1",width="100px",height="100px"),label="First") 

.

I는 다음 시도했다 :와 주변

1) ui.R 내부 루프와 ID ("sug1")와 라벨의 마지막 숫자는 각 루프를 증가 변수의 제조.

2) 결과를 축적하고 나는 그것을 표시 할 위치에 ui.R에 ui.R

나중에 출력 그것에 server.R에서) 다음
output$generateImages <- renderUI({ 
    (...) 
    for(...){ 
     (...) 
     w <- paste(w, actionButton(paste("oc",which(dir==folders)),label=dir)) 
    } 
    HTML(w) 
    }) 

과 기능을 HTML을 (사용 :

<button id="sug1" type="button" class="btn action-button"> 
<div id="sug1" class="shiny-image-output" style="width: 100px ; height: 100px"></div> 
First 
</button> 
:

htmlOutput("generateImages") 

3) 내가 맞 tlick/페이지 소스보기에서 볼 수 있듯이 내 코드 (생성하는 HTML 출력) 인 것을 HTMLoutput 또는 UIOutput을 사용하는 것이 도움이 될 것으로 추측하지만, 주어진

어떻게 이미지를 참조 할 곳을 알지 못해서 이것을 생성하는 방법을 알 수 없었습니다.

도움을 주셔서 감사합니다.

+0

당신이'tagList', 가능한'renderUI'을 원하는 생각합니다. 잠깐 시간을내어'apply' 함수 군에 익숙해지면'tagList (lapply ())'와 함께 작업 할 수있을 것으로 기대합니다. –

+0

어떻게 나중에 "청취자"와 연결합니까? 아무도 내가 stackoverflow에 응답 해야하는 것 같은 좀 더 도움을 얻을 수있는 모든 아이디어! :( – user3507046

+0

https://groups.google.com/forum/?fromgroups=#!forum/shiny-discuss 메일 링리스트를 시도하고 http://shiny.rstudio.com의 기사를 확인하십시오. –

답변

0

Jeff의 도움 덕분에 루프의 루프를 생성하고 UI 요소를 생성 할 수있었습니다.

전체 트릭리스트의 요소, 내 경우에 축적 내부에 루프가있는 renderUI 기능,하는 것입니다 :

LL[[i]] <- list(actionButton(txt,icon=imageOutput(pp,width="100px",height="100px"),label=dir)) 

이 목록이어야를 을 반환 함수에 의해. 이 모든 것은 server.R에 있습니다. ui.R에서 다음과 같이 작성해야합니다.

uiOutput(nameOfTheFunctionThatReturnedTheList) 

내 문제는 여전히 동일한 루프를 사용하여 이미지를 표시 할 수 없습니다 ... 도움이 필요하십니까? 이하와 같이) 이러한 문제

0

내 용액이다

  1. 위젯의 원하는 타입을 생성하는 함수를 정의한다. 하나의 매개 변수와 정수를주고,`paste0 '을 사용하여 그 정수를 위젯의 이름에 추가하십시오.
  2. 함수를 정수 벡터에 적용하는 반응식 개체를 정의하고 lapply을 사용하여 결과를 목록으로 반환합니다.
  3. renderUI을 사용하여 출력 개체를 정의하여 tagList 내부의 반응 개체를 반환합니다.

아래는 작동중인 버전의 코드입니다.

는 ui.R

library(shiny) 
shinyUI(fluidPage(
    titlePanel("WidgetVector"), 
    sidebarLayout(
    sidebarPanel(uiOutput("OnButton"),uiOutput("NumberOfWidgets")), 
    mainPanel(uiOutput("WidgetVectorDisplay") 
    ) 
) 
)) 

server.R

library(shiny) 
shinyServer(function(input, output) { 
    output$OnButton=renderUI({radioButtons("TurnOn",label="On/Off",choices=c("On"=1,"Off"=2),selected=2)}) 
    output$NumberOfWidgets=renderUI({numericInput("WidgetCount",label="How many widgets?",value=1)}) 
    makeRadioButton=function(n=1){radioButtons(paste0("Radio",n),label="Pick",choices=c("a"=1,"b"=2,"c"= 3),selected=1)} 
    WidgetVector=reactive({lapply(X = 1:input$WidgetCount, FUN = makeRadioButton)}) 
    output$WidgetVectorDisplay <- renderUI({ 
    if(is.null(input$TurnOn)){return() 
    } else if(input$TurnOn == 2){return() 
    } else tagList(WidgetVector())}) 
})