2017-12-18 169 views
0

我一直在嘗試開發一種有選擇性輸入的交互式Boxplot Shiny。使用Shiny製作boxplot交互式

當前代碼:

library(shiny) 

shinyUI(fluidPage(

    titlePanel("Sample 1"), 

    sidebarLayout(
    sidebarPanel(
     selectInput("p", "Choose your salaries", choices = c("low"='a',"mid"='b',"high"='c',"riches!"='d'), selected = 4) 
    ), 
    mainPanel(
     plotOutput("boxplot") 
    ) 
) 


)) 



library(shiny) 
read.csv("Salaries.csv") 

Categories <- cut (Salaries$TotalPay, breaks = c(0,36466,73678,104359,567595), labels = c("low","mid","high","riches!")) 

shinyServer(function(input, output){ 

    output$boxplot <- renderPlot({ 

    if(input$p=='a'){ 
     i<"1" 

    } 

    if(input$p=='b'){ 
     i<-"2" 
    } 

    if(input$p=='c'){ 
     i<-"3" 
    } 

    if(input$p=='d'){ 
     i<- "riches!" 
    } 


    boxplot(TotalPay~Categories[i]) 

    }) 
}) 

我不能讓箱線圖來在UI中所做的選擇反應。我懷疑它與水平做,因爲當我打電話:

> Categories["riches!"] 
[1] <NA> 
Levels: low mid high riches! 

' 我是否需要因素都增加了這些?或者我完全錯過了這一點? 在此先感謝!

+0

您是否將您的csv文件分配給數據框?在我看來,你失蹤了: 薪水< - read.csv(「Salaries.csv」) –

回答

0

看看如何access the column by name。下面的示例與mtcars數據集

library(shiny) 

ui <- fluidPage(
    selectInput("p","p",choices = names(mtcars)), 
    plotOutput("myplot")) 

server <- function(input, output, session) { 

    output$myplot <- renderPlot({ 
    boxplot(mtcars[,input$p]) 
    }) 
} 

shinyApp(ui, server) 
+0

謝謝豬肉,我會試試看,並且會回覆你 – BadLuckNick

+0

嘿豬肉, 試過了,它給了我:錯誤$操作者爲原子矢量無效.. ' 庫(有光澤) read.csv( 「Salaries.csv」) 類別< - 削(薪金$ TotalPay,斷裂= C(0,36466,73678,104359 ,567595),標籤= C( 「低」, 「中」, 「高」, 「財富!」)) shinyServer(功能(輸入,輸出){ 輸出$箱線圖< - renderPlot({ 箱線圖(TotalPay [,類別$ P]) }) }) ' – BadLuckNick

+0

ü得到錯誤,因爲ü沒有列名爲「 」分類$ P「',你的子集需要像' 」低「 ''或'「mid」'因爲你有那些列名! –