2016-04-15 4 views
0

光沢のあるアプリにチェックボックスを追加する際に問題があります。私は、線形回帰直線、黄土、またはまったく追加しないことをチェックできるようにしたい。これはダイヤモンドデータを使用しています。 任意の助けをいただければ幸いです。checkboxGroupInputのif文をShinyに追加する

ui.R

library(shiny) 
shinyUI(fluidPage(
fluidRow(
sidebarLayout(
    sidebarPanel(
    numericInput("size","Size",value=1,min=0,max=1,step=0.1), 
    sliderInput("opaqueness","Opaqueness",0,min=0,max=1), 
    checkboxInput("color","Color",value=T), 
    checkboxGroupInput("lines","Lines",choices=c("lm","loess")) 
    #add inputs 

    ), 
    mainPanel(
    plotOutput("diamondgraph") 
) 
) 
) 
)) 

server.R

library(dplyr) 
library(ggplot2) 
library(shiny) 
data<-diamonds 
data<-filter(data,color=="E"|color=="I"|color=="J") 


shinyServer(function(input, output) { 
    output$diamondgraph<-renderPlot({ 
g<-ggplot(data=data,aes(x=carat,y=price)) 
if (input$color){ 
    gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size)+scale_x_log10()+ 
    ggtitle("Scatterplot of Carat vs Price") 

}else{ 
    gcol<-g+geom_point(alpha=input$opaqueness, size=input$size)+ 
    geom_smooth()+ 
    scale_x_log10()+ 
    ggtitle("Scatterplot of Carat vs Price") 
} 
if (input$lines =="lm"){ 
    gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size)+geom_smooth(aes(color=color, method=lm))+scale_x_log10()+ 
    ggtitle("Scatterplot of Carat vs Price") 
} 
if 
(input$lines == "loess"){ 
    gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size)+geom_smooth(aes(color=color)) + scale_x_log10()+ 
    ggtitle("Scatterplot of Carat vs Price") 
} else 
    gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size) + scale_x_log10()+ 
    ggtitle("Scatterplot of Carat vs Price") 
gcol 
    }) 

}) 

答えて

1

あなたがたくさんあるので、それは正確な問題を特定するのは簡単ではありませんコードの重複があり、フォーマットを解析するのが困難です。 RStudio Ctrl + ICtrl + Shift + Aを使用している場合は、それぞれ行を字下げしてコードを再フォーマットします。 input$lines値をチェックし、他のロジックはちょうどとにかくaes(color=color)でそれを上書きしたため

  1. input$color設定が使用されていませんでした。ここに私は気づいたいくつかの問題があります。重複したコードをたくさん除外すると、これははるかに分かりやすくなります。
  2. checkboxGroupInput("lines","Lines",choices=c("lm","loess"))は、radioButtonである必要があります。これらの事柄が同時に真実であることは意味をなさない。
  3. 適切なデフォルト値を使用します(例: input$opaquenessにゼロより大きい初期値を設定してください。私のために細かい

次の実行:

library(dplyr) 
library(ggplot2) 
library(shiny) 

data <- diamonds 
data <- filter(data, color == "E" | color == "I" | color == "J") 
set.seed(123) 
data <- data[sample(seq_len(nrow(data)), 3000),] 

shinyApp(
    ui = fluidPage(fluidRow(
     sidebarLayout(
      sidebarPanel(
       numericInput(
        "size", "Size", 
        value = 1, 
        min = 0, 
        max = 1, 
        step = 0.1 
       ), 

       sliderInput(
        "opaqueness", "Opaqueness", 
        min = 0, max = 1, value = 0.5 
       ), 

       checkboxInput(
        "color", "Color", 
        value = TRUE 
       ), 

       radioButtons(
        "lines", "Lines", 
        choices = c("lm", "loess", "none"), 
        selected = "none" 
       ) 
      ), 

      mainPanel(plotOutput("diamondgraph")) 
     ) 
    )), 

    server = function(input, output) { 

     output$diamondgraph <- renderPlot({ 
      g <- ggplot(data = data, aes(x = carat, y = price)) 

      if (input$color) { 
       g <- g + geom_point(
        aes(color = color), 
        alpha = input$opaqueness, 
        size = input$size) 

       if (input$lines != "none") { 
        g <- g + geom_smooth(
         aes(color = color), 
         method = input$lines) 
       } 

      } else { 
       g <- g + geom_point(alpha = input$opaqueness, 
            size = input$size) 

       if (input$lines != "none") { 
        g <- g + geom_smooth(method = input$lines) 
       } 
      } 

      g + scale_x_log10() + 
       ggtitle("Scatterplot of Carat vs Price") 

     }) 
    } 
) 
関連する問題