【问题标题】:pass radio button value to filter将单选按钮值传递给过滤器
【发布时间】:2019-07-11 09:50:50
【问题描述】:

我有以下数据:-

   Var1            Freq year
1 United States 600015 1906
2 United States 533209 1811
3 China         465852 1906
4 China         438228 1811
5 Japan         117248 1906
6 Japan         109436 1811
7 France         67183 1906
8 Germany        60503 1811
9 Germany        59140 1906
10 France         43580 1811

所以我想绘制一个条形图,其中包含 1811 和 1906 的单选按钮,选择单选按钮 1811 应该打印处理后的数据框和具有 1811 值的数据条形图。

我正在尝试使用下面的代码

ui <- fluidPage(
    titlePanel(h1("Chart", align = "center", style = "color:black")),
    sidebarLayout(
    sidebarPanel(
    radioButtons("radio","Radio buttons",choices = list("1906" = 1906, "1811" = 1811),selected = 1906),
    actionButton("goButton","Analyze")),
    mainPanel(
    fluidRow(splitLayout(cellWidths = c("50%", "100%"),DT::dataTableOutput("mytable"),plotOutput("Plot",height=550)))
    )))

server <- function(input, output) {

    #yrdt <- filter(all_datay, all_datay$year %in% c('1906',''))
    yrdt <- filter(all_datay, all_datay$year %in% c('input$radio')
    pltyrdt <- head(yrdt,10)

    output$mytable = DT::renderDataTable({
    datatable(yrdt, class = 'cell-border stripe', colnames = c('Rank', 'Country', 'Freq', 'Year'))})

    output$Plot <- renderPlot({
            input$goButton
    barplot(pltyrdt$Freq,names.arg=pltyrdt$Var1,horiz=F,xlab="Country",ylab="Freq", yaxs="i", xaxs="i")})

    output$value <- renderPrint({ input$radio })
    }
shinyApp(ui, server)

我遇到以下错误

错误:需要有限的“xlim”值。

谁能帮帮我。

如果我只选择了 1906 年的数据,那么输出如下图所示。

【问题讨论】:

    标签: r dataframe shiny


    【解决方案1】:

    有多个问题。

    • 'input$radio' 用引号引起来。它是一个字符串,字面意思是input$radio(而不是值)。如果您删除引号 ('),您会收到一条错误消息,告诉您问题出在哪里,即
    • 您尝试在反应式环境之外使用input$radio

    基本上,您在服务器设置期间调用一次filter 函数并要求它获取年份等于input$radio 的所有行(不是反应变量input$radio 的内容,而是文字字符串@987654331 @)。因此,yrdt 是空的。

    这是一种选择:

    server <- function(input, output) {
    
        yrdt <- function() { filter(all_datay, all_datay$year %in% input$radio) }
    
        output$mytable = DT::renderDataTable({ 
          datatable(yrdt(), class = 'cell-border stripe', 
                            colnames = c('Rank', 'Country', 'Freq', 'Year'))})
    
        output$Plot <- renderPlot({
                input$goButton
                pltyrdt <- head(yrdt(),10)
                barplot(pltyrdt$Freq, 
                        names.arg=pltyrdt$Var1,
                        horiz=F,
                        xlab="Country", ylab="Freq", 
                yaxs="i", xaxs="i")
        })
    
        output$value <- renderPrint({ input$radio })
    

    }

    这里发生的情况是,您定义了一个可以计算选择的函数,并在需要时调用该函数。由于它是从响应式环境(例如 renderPlot())中调用的,因此 input$radio 可以按预期工作。

    或者,您可以将yrdt 定义为反应式表达式:

    yrdt <- reactive({filter(all_datay, all_datay$year %in% input$radio) })
    ...
        pltyrdt <- head(yrdt(),10)
    

    (您可以像使用上面的函数一样使用它)。

    更多关于闪亮here的反应性环境。

    【讨论】:

    • 谢谢罗纳克。它按预期工作。但是如果不单击分析按钮本身,就会生成报告。你能告诉我我该怎么做吗?
    • 还有什么方法可以一次选择多个单选按钮。谢谢
    • 广告1:如果你想避免它,把isolate()放在input$radio周围(见here)。关于第二个问题,你想要的是checkboxes。根据定义,单选按钮一次只能选择一个。
    • 谢谢,但它不起作用。这是我的代码 yrdt
    • 不需要大括号,直接写isolate(input$radio)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2019-07-06
    • 2011-03-13
    • 1970-01-01
    • 2017-11-30
    • 2019-03-24
    • 2014-03-26
    相关资源
    最近更新 更多