動的 UI を googlevis で動作させようとすると、少し問題が発生します。基本的に、ユーザーがスライダー バーを使用して関心のある範囲を入力し、それに応じてプロットを変更できるようにしたいと考えています。次の例では、googlevis パッケージのデータ セットを使用して、意味を説明しています。以下のコードを実行すると、エラーは発生しませんが、プロットは生成されません。
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Example"),
sidebarLayout(
sidebarPanel(
radioButtons('data_choice', 'choose a dataset',
choices= c('dataset1', 'dataset2')),
uiOutput('slider')
),
mainPanel(
htmlOutput('view')
)
)
))
サーバー.R
library(shiny)
library(googleVis)
library(ggplot2)
dataset1= dino
dataset2= Fruits[,c(1,6)]
shinyServer(function(input, output) {
#Output new slider depending on dataset chosen
output$slider<- renderUI({
if(input$data_choice== 'dataset1'){
sliderInput('rangeSlider', 'Choose data range',
min= 0, max= max(dataset1$Length),
value= c(0, max(dataset1$Length)))
}else if(input$data_choice== 'dataset2'){
sliderInput('rangeSlider', 'Choose data range',
min= 0, max= max(dataset2$Profit),
value= c(0, max(dataset2$Profit)))
}
})
#plot adjust
adjustPlot<- reactive({
#Adjust dataframes based on input from slider
if(input$data_choice== 'dataset1'){
adjusted_dataset1<- subset(dataset1,
Length >= input$rangeSlider[1] & Length <= input$rangeSlider[2])
}else if(input$data_choice== 'dataset2'){
adjusted_dataset2<- subset(dataset2,
Profit >= input$rangeSlider[1] & Profit <= input$rangeSlider[2])
}
})
output$view <- renderGvis({
gvisBarChart(adjustPlot(), options= list(height= 700))
})
})
出力を googlevis ではなく ggplot プロットに置き換えると、コードは正常に実行されます。
ui.R
mainPanel(
plotOutput('view')
)
サーバー.R
#ggplot that works
output$view <- renderPlot({
if(input$data_choice=='dataset1'){
p<-ggplot(adjustPlot(), aes(x=Dinosaur, y=Length))
p<-p + geom_bar(stat='identity', fill='navyblue') + coord_flip()
}else if(input$data_choice=='dataset2') {
p<-ggplot(adjustPlot(), aes(x=Fruit, y=Profit))
p<-p + geom_bar(stat='identity', fill= 'forestgreen') + coord_flip()
}
print(p)
}, height=550)
renderUI から入力を受け取ると、アプリケーションへの Google プロットのレンダリングに問題があるようです (おそらく、html としてレンダリングされるため)。どんな援助でも大歓迎です。ありがとう!