【问题标题】:Using filter the data before plotting will cause missing argument在绘图之前使用过滤数据会导致缺少参数
【发布时间】:2019-06-05 23:32:11
【问题描述】:

我想为一些数据创建一个闪亮的仪表板,但是,当我绘制过滤后的数据框时,它会导致大约 0.5 秒的错误,并会在控制台中显示。

我尝试删除子集(.[,input$groupby] %in% input$selectline 的过滤命令,所有错误都将得到解决。但是,我需要过滤数据以进行闪亮的交互。

newData = mydata %>%
        group_by(`Year.ending.December`,.dots=input$groupby) %>%
        summarise(`Incidents.Recorded` = sum(`Incidents.Recorded`)/1000) %>%
        as.data.frame() %>%
        subset(.[,input$groupby] %in% input$selectline) #This command causes the error

ggplot(newData,aes_string("Year.ending.December","Incidents.Recorded",color = input$groupby)) +
        geom_line() +
        labs(x="Year",y="Counts(thound)")

如上面的代码所示,input$groupby 会从 ui.R 返回一个列名 , 但是,折线图中会显示多条线,所以我还需要让用户选择他们想要查看的线,因此,input$selectline 将返回一个关于数据值的列表。

另外我认为我的逻辑是可以的,因为它最终会显示正确的结果,只是问题是在显示结果之前,绘图区域会显示大约 0.5s 的错误消息,如下所示: 警告:顺序错误:参数 1 不是向量

  108: order

  105: to_basic.GeomLine

  103: layers2traces

  102: gg2list

  101: ggplotly.ggplot

   98: plotly_build.gg

   96: "plotly":::"prepareWidget"

   95: func

   82: origRenderFunc

   81: output$plotArea

    1: runApp

【问题讨论】:

    标签: r


    【解决方案1】:

    假设您在 renderPlot() 函数中运行该代码。您可以尝试更改一些内容:使用group_by_ 而不是group_by,因为input$groupby 是一个字符向量。并使用filter_at 而不是subset

    newData <-  mydata %>%
      group_by_("Year.ending.December", input$groupby) %>%
      summarise(`Incidents.Recorded` = sum(`Incidents.Recorded`)/1000) %>%
      as.data.frame() %>%
      filter_at(vars(input$groupby), any_vars(. %in% imput$selectline))
    

    如果您可以展示您的应用和数据的可重现示例,并且仅包含问题中涉及的元素,那么这将是一种更好的方式来帮助您并在任何推荐之前测试代码。

    【讨论】:

    • 我听从了您的建议,但问题仍然存在。我的代码已发布在 github 上。github.com/YibeiNiu/YibeiNiu/tree/master/test
    • 确保您正在加载 tidyverse
    • 我解决了这个问题,我在使用 ggplot 命令时使用 if(nrow(newData)>0) 来确保数据框不为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多