2014-04-07 3 views
1

저는 이것을 아주 용서해 줘요 .- 나는 반짝이는 앱을 만들고 있어요. 고정 형식의 업로드 된 데이터 파일을 사용하고 사용자 선택에 따라 다양한 플롯을 렌더링합니다. 앱의 중요한 부분 중 하나는 각각 하나의 플롯을 포함하는 탭 세트입니다.renderUI의 shiny - renderPlot - as.character (x)의 오류 : 'closure'유형을 'character'유형의 벡터로 강제 변환 할 수 없습니다.

저는 renderUI를 사용하여 탭을 렌더링하고 있지만 플롯을 렌더링하는 데는 많은 어려움이 있습니다. 나는 renderPlot, outputPlot을 시도했으나 보여줄 플롯을 얻을 수 없다. 다양한 오류가 발생하지만 아래 코드에서 "as.character (x)의 오류가 발생했습니다."renderPlot (engPlot) 지점에서 '문자'유형의 벡터에 'closure'유형을 강제 변환 할 수 없습니다. 당신이를 실행하는 때이 오류를 발견했습니다

runplot <- function(xSeriesLabels, xSeriesValues, leftseries, rightseries1, rightseries2, chartType, columnSeries, xTitle){ 

if (missing(xTitle)==FALSE) { 
    strTitle <- xTitle 
    } else { 
    strTitle <- "no title supplied" 
    } 


    p <- barplot(leftseries, width=1, col=barCol, axisnames = leftseries, names.arg=xSeriesLabels, axis.lty=1, xlab=strTitle) 

    return(p) 
} 

답변

1

server.R

ui.R

# Define UI 
shinyUI(fluidPage(
# Application title 
    titlePanel("Chart Creation Tool"), 
# Sidebar 
sidebarLayout(
    sidebarPanel(
     fileInput("fileBlob", "Upload File", multiple = FALSE, accept = NULL), 
     selectInput("selectAnalysis", label=h3("Select Input"), choices=c("Month x Year", "Strategies", "Programs", "Segments")), 
    uiOutput("strategyList") 
), 

# Show a plot of the generated distribution 
mainPanel(
    uiOutput("mainPanel")  
) 
) 
)) 

mainPanel 부분

output$mainPanel <- renderUI ({ 

if (length(RawImport())==0L) { 

    out <- NULL 

}else{ 
    if (input$selectAnalysis=="Month x Year") { 
    dfAggMonth <- aggregate(cbind(Sent,Delivered,UniqueOpens,Responders,Bounced,Unsubscribes,TotalSpamComplaints,HardBounces,SoftBounces) ~ SentMonth + SentYear + SentMonthName, RawImport(), FUN = sum) 
    dfAggMonth <- addRatios(dfAggMonth) 
    dfAggMonth <- dfAggMonth[with(dfAggMonth, order(Date)), ] 

    engPlot <- runplot(paste(dfAggMonth$SentMonthName, dfAggMonth$SentYear,sep="-"), dfAggMonth$Date, dfAggMonth$Delivered, dfAggMonth$UniqueOpenRate, dfAggMonth$ResponderRate, "engagement", , "Temp Title") 

    out <- tabsetPanel(
     tabPanel("Engagement", "Engagement", renderPlot(engPlot)), 
     tabPanel("Summary", "summary", "summary"), 
     tabPanel("Deliverability",runplot(paste(dfAggMonth$SentMonthName, dfAggMonth$SentYear,sep="-"), dfAggMonth$Date, dfAggMonth$Delivered, dfAggMonth$BounceRate, , "deliverability", , "Temp Title")) 
    ) 
    } 
    else { 
    out <- tabsetPanel(
     tabPanel("Tab 1", input$selectAnalysis), 
     tabPanel("Tab 2", input$selectAnalysis) 
    ) 
    } 

} 

out 
}) 

RunPlot 기능은 자주 발생 함수는 server.R에 실행될 의미이며 ui.R에 있습니다.

renderUI은 본격적인 클라이언트 측 UI를 만들 예정입니다. 즉, 동적 UI에서 반환하는 모든 코드 (실제로는 server.R에 저장되어야 함)가 ui.R에 존재할 수있는 유효한 클라이언트 측 코드 여야하며, 이는 테스트가 훨씬 쉬울 수 있음을 의미합니다. 동적으로 만들려는 코드 (예 : out tabsetPanels 중 하나)를 ui.R으로 이동하면 나중에 쉽게 디버깅 할 수 있습니다.

이 경우에는 문제가 있다고 생각합니다. 당신은 당신이 그것을했다면 renderPlot 호출 주위에있다 볼 수 있습니다. 그냥 여기에 동적 UI를 만들고있어,이 경우 plotOutput("plotName"), UI 호환 기능을 사용하려면. 다음 서버 쪽에서 ' 해당 출력에 플롯을 할당합니다.

output$plotName <- renderPlot({ 
... 
}) 

플롯이 표시 될 때 원하는대로 작동하며 플롯이 표시되지 않을 때 효과가 나타나지 않습니다.