2017-09-24 14 views
2

私はmpgデータセットを使用してR光沢のあるスキルを練習していますが、問題が発生しました。R-shiny:連続スケールに離散値を入力

少なくとも1つの離散変数を含むグラフを作成するために、さまざまな変数を選択できるアプリを作成したい場合は、geom_boxplotを描画します。それ以外の場合はgeom_pointを描画します。

マイui.Rは次のようになります。

library(shiny) 

shinyUI(fluidPage(

    # Application title 
    titlePanel("Old Faithful Geyser Data"), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(
     selectInput(inputId = "var1", 
        label = "Choose x variable", 
        choices = 
        names(mpg) 
    ), 
     selectInput(inputId = "var2", 
        label = "Choose y variable", 
        choices = 
        names(mpg)) 
    ), 

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

そして マイserver.Rは次のようになります。

library(shiny) 
library(tidyverse) 
library(dplyr) 

shinyServer(function(input, output) { 

    output$distPlot <- renderPlot({ 

    if(typeof(mpg[, input$var1]) == "chr" || 
     typeof(mpg[, input$var2]) == "chr") 
    { 
     ggplot(data = mpg) + 
     geom_boxplot(mapping = 
          aes(x = mpg[, input$var1], 
           y = mpg[, input$var2])) + 
     xlab(input$var1) + 
     ylab(input$var2) + 
     ggtitle(paste("Plot", input$var1, "vs", input$var2)) 
    } 

    else 
    { 
     ggplot(data = mpg) + 
     geom_point(mapping = 
        aes(x = mpg[, input$var1], 
         y = mpg[, input$var2])) + 
     xlab(input$var1) + 
     ylab(input$var2) + 
     ggtitle(paste("Plot", input$var1, "vs", input$var2)) 
    } 
    }) 
}) 

しかし、それは単に動作しません!離散変数を選択すると、「離散値を連続スケールに適用する」というエラーメッセージが表示されます。しかし、私は両方とも連続的な価値を選ぶなら、それはうまくいくと思われます。

なぜこのようなエラーメッセージが表示されますか? 私を助けてください! ありがとうございます!

答えて

1

あなたはすべてサーバー側で、ここでの問題のカップルがあります:あなたはtypeofあなたは常にリストを取得していることがわかりますの例を確認した場合:

一つを

typeof(mpg[,"model"]) 
#[1] "list" 
typeof(mpg[,"displ"]) 
#[1] "list" 

[は実際の要素ではなく、その要素を含むリストを抽出するためです。 ?"["から:

からのインデックス付けは、[アトミックベクトルと類似しており、指定された要素のリストを選択します。

むしろ、typeof(mpg[[input$var1]])などを使用してください(要素を含むリストではなく)リストの要素を抽出する必要があります。

2:

文字列に基づいてプロットする列を選択しggplotaes_stringで特定の機能が実際にあります。

これらの2つの変更を組み込むことで、光沢のあるアプリが機能するはずです。私はまた、サーバを少し簡略化して、共通のggplotコードを取り除きました。

server <- function(input,output){ 

    output$distPlot <- renderPlot({ 

    p <- ggplot(mpg) + xlab(input$var1) + 
         ylab(input$var2) + 
         ggtitle(paste("Plot", input$var1, "vs", input$var2)) 

    if(typeof(mpg[[input$var1]]) == "character" | 
     typeof(mpg[[input$var2]]) == "character") 
    { 
     p <- p + geom_boxplot(mapping = 
         aes_string(x = input$var1, 
            y = input$var2)) 
    } 

    else 
    { 
    p <- p + geom_point(mapping = 
        aes_string(x = input$var1, 
           y = input$var2)) 
    } 

    return(p) 

    }) 
} 
関連する問題