【问题标题】:Why is Rstudio data viewer filtering broken by dplyr grouped tables?为什么 dplyr 分组表破坏了 Rstudio 数据查看器过滤?
【发布时间】:2015-08-27 08:02:18
【问题描述】:

使用data viewer in Rstudio version 0.99,我想按国家名称(或其他字符向量)过滤一个 dplyr 分组表。这会破坏数据查看器。 Rstudio 说“无法对数据进行排序或过滤”,R 返回的错误非常神秘:

Error in vapply(x[[col]], `[`, 0, 1) : values must be type 'double',
 but FUN(X[[1]]) result is type 'character'

虹膜样本数据示例

我可以使用 iris 样本数据集重现这一点。

irisgrouped <- iris %>% 
    mutate(Species = as.character(Species)) %>% # Change to a character vector
    group_by(Sepal.Length)

Species 过滤的数据查看器会中断消息"failure to sort or filter data"

基于我使用的数据的示例

这也是我使用dput()的数据集的一部分

library(dplyr)


dtf <- structure(list(itemcode = c(1632, 1632, 1632, 1632, 1632, 1632
), year = c(1961L, 1961L, 1961L, 1961L, 1961L, 1961L), country = c("Albania", 
                                                                   "Austria", "Bulgaria", "Denmark", "Finland", "France")), .Names = c("itemcode", 
                                                                                                                                       "year", "country"), row.names = c(NA, -6L), class = "data.frame")

上面可以粘贴在R命令中,在R studio table viewer中过滤没有问题。但是如果我再次对数据框进行分组:

dtf2 <- dtf %>% group_by(itemcode) 

过滤中断并显示“未能对数据进行排序或过滤”消息。

您能否指出过滤器对分组数据帧中的某些字符向量不起作用的原因?

sessionInfo()

如果这很重要,这是我的 sessionInfo()

R version 3.1.1 (2014-07-10)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_IE.UTF-8      LC_NUMERIC=C             
 [3] LC_TIME=en_IE.utf8        LC_COLLATE=en_IE.UTF-8   
 [5] LC_MONETARY=en_IE.utf8    LC_MESSAGES=en_IE.UTF-8  
 [7] LC_PAPER=en_IE.utf8       LC_NAME=C                
 [9] LC_ADDRESS=C              LC_TELEPHONE=C           
[11] LC_MEASUREMENT=en_IE.utf8 LC_IDENTIFICATION=C      

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.4.1

loaded via a namespace (and not attached):
[1] assertthat_0.1  DBI_0.3.1       lazyeval_0.1.10 magrittr_1.5   
[5] parallel_3.1.1  Rcpp_0.11.4     tools_3.1.1    

【问题讨论】:

  • 嗯,我也无法重现,即使在View。我有 Windows 7、dplyr 0.41、R 3.2、RStudio 0.99.441。
  • 如果您的问题是关于 RStudio IDE 的某个特定功能无法正常工作,他们的支持页面可能是更合适的查询地点。
  • @joran 我已经发布了a message on their support form as a reply to a user who had a similar problem。我不确定这是否与我的系统配置有关,这就是我想从其他用户那里收集知识的原因。
  • 您好,我构建了 RStudio 的数据查看器,我可以重现您的问题。我已经提交了一个错误,希望很快会在样片中得到修复。
  • 谢谢@Jonathan 有错误报告的链接吗?

标签: r debian rstudio dplyr


【解决方案1】:

我可以确认我遇到了同样的错误。我在 Windows 8.1 上的当前 RStudio 预览版 (0.99.441) 上使用 dplyr 0.4.1 运行以下内容。

dtf <- structure(list(itemcode = c(1632, 1632, 1632, 1632, 1632, 1632
), year = c(1961L, 1961L, 1961L, 1961L, 1961L, 1961L), country = c("Albania",
"Austria", "Bulgaria", "Denmark", "Finland", "France")), .Names = c("itemcode", 
"year", "country"), row.names = c(NA, -6L), class = "data.frame")

dtfGrouped <- dtf %>% group_by(itemcode)

View(dtfGrouped)

点击过滤器然后输入国家名称会导致失败。

但是,View(as.data.frame(dtfGrouped)) 然后单击过滤器有效。

【讨论】:

  • 我遇到了同样的问题,as.data.frame() 也修复了它。我认为 Hadley 的 tbl_df 类和 RStudio 的 View() 函数之间一定有一些不好的交互。
【解决方案2】:

此问题是由于 R 中的“错误”造成的。
这可以通过使用聚合函数返回多个值来复制:

尝试类似:(以下未测试)

newDF <- aggregate(formula = val ~ id1 + id2,data = x,FUN = function(x) c(mn = mean(x), n = length(x) ))

如果您检查长度,新的“列”实际上将具有 2*nrow(x) 的长度。 它不是真正的数据框,但类仍然是“data.frame

干杯。

【讨论】:

  • 这有点不同:我使用了newDF &lt;- aggregate(formula = mpg ~ cyl + gear,data = mtcars,FUN = function(x) c(mn = mean(x), n = length(x) )); View(newDF)View() 确实无法正确显示,但我没有收到错误消息。 (R 3.4.3,macOS)
  • 首先,检查所有列的长度。使用此函数创建的列的长度将是其他列的两倍。然后,在 RStudio 的环境部分,检查 newDF 对象。数据框将包含除最后一列之外的所有常规列,最后一列将具有 2 个维度而不是 1 个。
猜你喜欢
  • 2014-12-31
  • 2021-08-23
  • 1970-01-01
  • 2015-02-21
  • 2011-07-17
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 2016-09-23
相关资源
最近更新 更多