闪亮的条件语句

Shiny Conditional Statements

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

将图表类型从条形图切换为直方图
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 语句正常工作。当它呈现到网络时,它始终默认为直方图,而不管数据类型 selected for yval 或者哪个在 if 语句中首先出现。

UI 在这里:

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")
)
)
))

来自 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()
}