闪亮的条件陈述

时间:2015-02-13 02:37:26

标签: r shiny

我在Shiny中使用条件语句时遇到问题。我希望用户能够为Y值选择数据,它将改变显示的图表类型。当数据类型为数字时,图表显示正常。但是当数据类型是文本时,我希望图表更改为直方图并只计算实例数。我正在使用的两个方案是所选类别中的合同支出与所选类别中的合同数量。我的服务器代码如下。我只需要能够根据所选的值将图形类型从条形切换到直方图。

library(shiny)
library(ggplot2)

shinyServer(function(input, output) {
spend <- read.csv("C:/Users/William/Documents/First_Rstudio/App-1/data/CENTCOMdata.csv")
output$GovSpend <- renderPlot({
    spend <- spend[spend$Contracting.Agency.Name == input$agency,]

if(typeof(input$yval) = "double"){ggplot(spend, aes_string(x = input$xlab, y = ylab fill = "Tier.1.Contract.Category")) + 
        geom_bar(na.rm = TRUE, stat= "identity")
    }    
else {ggplot(spend, aes_string(x = input$xlab, fill= "Tier.1.Contract.Category")) + 
        geom_bar()}
})
})

每个图表都可以正常运行。我只是不能让if语句起作用。当它呈现给Web时,它总是默认为直方图,无论为yval选择的数据类型是什么,或者在if语句中首先出现。

用户界面就在这里:

library(shiny)
spend <- read.csv("C:/Users/William/Documents/First_Rstudio/App-1/data/CENTCOMdata.csv")
shinyUI(fluidPage(

titlePanel("All Gov't Spend"),

    sidebarLayout(

     sidebarPanel( 
        selectInput("xlab", label = "Select X Values",
                choices = colnames(spend),
        selected = "FY"
                ),

        selectInput("yval", label = "Select y Values",
                    choices = colnames(spend),
                selected = "Action_Absolute_Value"
        ),

    selectInput("agency", label = "Select Agency",
                choices = levels(spend$Contracting.Agency.Name)
                ),
        selectInput("Country", label = "Select Country",
                choices = levels(spend$Principal.Place.of.Performance.Country.Name))

),

    mainPanel(plotOutput("GovSpend")
)
)
))

1 个答案:

答案 0 :(得分:0)

HTML元素的用户输入值始终是字符串。因此,input$yval=="Action.Obligation"input$yval=="Tier.1.Contract.Category" input$yval始终是一个字符,永远不会加倍。您不想检查input$yval的类型,要检查spend[[input$yval]]的数据类型,因为这实际上会查看data.frame中的列。我建议你将你的if语句改为

if ( is.numeric(spend[[input$yval]]) ) {
    ggplot(spend, aes_string(x = input$xlab, y = ylab fill ="Tier.1.Contract.Category")) + 
        geom_bar(na.rm = TRUE, stat= "identity")
} else {
    ggplot(spend, aes_string(x = input$xlab, fill= "Tier.1.Contract.Category")) + 
        geom_bar()
}