2016-09-09 4 views
0

多くの検索と調査の後、私はこの作業をどのように行うかわかりません。基本的に私がしたいのは、ggplot_buildを使ってプロットで生成されたデータにアクセスすることです。しかし、プロットはrenderPlotを通してShinyで生成されるので、私はそれをアプリケーションのどこかにアクセスできません。Shiny RのrenderPlotからggplot_buildにアクセスする必要があります

私が思いついたもっとも近いことは、空のreactiveValueを宣言し、毎回私のプロット関数を追加することです。こうすることで、ggplot_buildからデータを取得するために必要なときにプロットオブジェクトにアクセスできるようになります。

エラーは発生しませんが、コードを実行するとプロットは生成されません。コードそのものは以下の通りですが、これはプロット自体の非常に単純な例であることに注意してください。フルバージョンでは、geom_ termsなどの追加可能性が大幅に増えます。どんな助けでも大歓迎です。前もって感謝します。

限り私のデータとして、それはCSV形式でだと、このようなものになります。

Year,Field,Company,Hybrid,Yield,Moisture,Erect,DoP,DoH,RM,Stand,PPA 
 
1934,Alhambra,Champion,White Pearl,9.1,39.5,NaN,2-May,20-Nov,NaN,NaN,NaN 
 
1944,Galesburg,Pioneer,334,92.7,18.3,99.3,20-May,8-Nov,NaN,NaN,NaN 
 
1945,Sheldon,Funk,G-169,70.6,24.3,39,25-May,8-Nov,NaN,NaN,NaN 
 
1946,Galesburg,Doubet,D-42,100.8,22,94,24-May,8-Nov,NaN,NaN,NaN 
 
1949,DeKalb,Ferris,F-11,51.3,18.4,91,23-May,16-Nov,NaN,72,NaN

とコード:

Variable_Extractor <- function(dataset) { 
 
    vars = names(dataset) 
 
    for (i in vars) { 
 
    if (is.factor(dataset[[i]][1]) == TRUE) { 
 
     vars = vars[vars != i] 
 
    } 
 
    } 
 
    return(vars) 
 
} 
 

 
Identify_Min_Max <- function(dataset, var) { #var must be a string column name 
 
    a = min(dataset[[var]], na.rm = TRUE) 
 
    b = max(dataset[[var]], na.rm = TRUE) 
 
    return(c(a,b)) 
 
} 
 

 
ui <- fluidPage(
 
    titlePanel('Illinois Yield Trials'), 
 
    
 
    sidebarLayout(position = 'left', 
 
     sidebarPanel(
 
     selectInput('var', 'Choose variable', 
 
        c('Choose one' = '', Variable_Extractor(agridata))), 
 
     uiOutput('histslider'), 
 
     numericInput('bin_width', 'Enter binwidth', 
 
        value = 5, min = 0, max = 1000)), 
 
       
 
     mainPanel(div(style = "position:relative", 
 
        plotOutput('plot'))) 
 
    ) 
 
) 
 

 
    server <- function(input, output) { 
 
    
 
    output$histslider <- renderUI({ 
 
     valhist <- Identify_Min_Max(agridata, toString(input$var)) 
 
     sliderInput(inputId = 'sliderhist', 
 
        label = paste("Select values for ", input$var, sep = ''), 
 
        min=valhist[1], 
 
        max=valhist[2], 
 
        value=valhist, 
 
        sep= '') 
 
    }) 
 
    
 
    plt <- reactiveValues() 
 
    
 
    output$plot <- renderPlot({ 
 
     plt$p <- ggplot() 
 
     agridatasub <- subset(agridata, agridata[[input$var]] >= input$sliderhist[1] & agridata[[input$var]] <= input$sliderhist[2]) 
 
     plt$p <- plt$p + geom_histogram(data=agridatasub, aes_string(x=input$var), binwidth = input$bin_width, 
 
       color = 'black', fill = 'gray75') 
 
     return(plt$p) 
 
    }) 
 
    
 
    } 
 

 
    shinyApp(ui=ui, server=server)

答えて

1

あなたを代わりに、データセットのアイリスを使用して

plt <- reactive({ 
agridatasub <- subset(agridata, agridata[[input$var]] >= input$sliderhist[1] & agridata[[input$var]] <= input$sliderhist[2]) 
    ggplot() + geom_histogram(data=agridatasub, aes_string(x=input$var), binwidth = input$bin_width, 
            color = 'black', fill = 'gray75') 
}) 
output$plot <- renderPlot({ 
    plt() 
}) 

フル例:あなただけをすることができ、reactiveValuesその方法を使用する必要はありません

Variable_Extractor <- function(dataset) { 
    vars = names(dataset) 
    for (i in vars) { 
    if (is.factor(dataset[[i]][1]) == TRUE) { 
     vars = vars[vars != i] 
    } 
    } 
    return(vars) 
} 

Identify_Min_Max <- function(dataset, var) { #var must be a string column name 
    a = min(dataset[[var]], na.rm = TRUE) 
    b = max(dataset[[var]], na.rm = TRUE) 
    return(c(a,b)) 
} 
library(shiny) 
ui <- fluidPage(
    titlePanel('Illinois Yield Trials'), 

    sidebarLayout(position = 'left', 
       sidebarPanel(
        selectInput('var', 'Choose variable', 
           c('Choose one' = '', Variable_Extractor(iris))), 
        uiOutput('histslider'), 
        numericInput('bin_width', 'Enter binwidth', 
           value = 5, min = 0, max = 1000)), 

       mainPanel(div(style = "position:relative", 
           plotOutput('plot')), 
          verbatimTextOutput("test")) 
) 
) 

server <- function(input, output) { 

    output$histslider <- renderUI({ 
    valhist <- Identify_Min_Max(iris, toString(input$var)) 
    sliderInput(inputId = 'sliderhist', 
       label = paste("Select values for ", input$var, sep = ''), 
       min=valhist[1], 
       max=valhist[2], 
       value=valhist, 
       sep= '') 
    }) 

    plt <- reactive({ 
    req(input$var) 
    irissub <- subset(iris, iris[[input$var]] >= input$sliderhist[1] & iris[[input$var]] <= input$sliderhist[2]) 

    ggplot() + geom_histogram(data=irissub, aes_string(x=input$var), binwidth = input$bin_width, 
            color = 'black', fill = 'gray75') 
    }) 

    output$plot <- renderPlot({ 

    return(plt()) 
    }) 

    output$test <- renderPrint({ 
    req(input$var) 
    str(ggplot_build(plt())) 
    }) 

} 

shinyApp(ui=ui, server=server) 
+0

はあなたの助けをありがとう! – Sydney

関連する問題