【问题标题】:Summarising values in dplyr - Crashes RStudio总结 dplyr 中的值 - 崩溃 RStudio
【发布时间】:2014-02-16 08:24:05
【问题描述】:

dplyr 可以对data.frame 执行链式summarise 操作吗?

我的 data.frame 具有以下结构:

data_df = tbl_df(data)    
data_df %.%
        group_by(col_1) %.%
        summarise(number_of= length(col_2)) %.%
        summarise(sum_of = sum(col_3)) 

这会导致 RStudio 遇到 fatal error - R Session Aborted 消息

通常使用plyr 我会毫无问题地包含这些summarise 函数。

更新

数据为here.

代码是:

library(dplyr)

orth <- read.csv('orth0106.csv')
orth_df = tbl_df(orth)


orth_df %.%
    group_by(Hospital) %.%
    summarise(Procs = length(Procedure)) %.%
    summarise(SSIs = sum(SSI))

【问题讨论】:

  • 您能否提供一个可重现的示例来重现错误?
  • @martin-bel - 现在包括数据和代码。
  • 以后这样的bug请直接在github上提交。我已投票关闭此问题,因为一旦下一个版本的 dplyr 发布(即将发布),它将不再适用
  • 这个问题似乎离题了,因为它是一个已在软件开发版本中修复的错误报告。

标签: r rstudio dplyr


【解决方案1】:

我可以在运行 RStudio 0.97.551 的 Windows 7 机器上重现该错误

这可能是因为您正在调用 summarise 并链接到不存在的东西。你可以summarise 使用 2 个不同的列,就像我在这里所做的那样。

url <- "https://raw.github.com/johnmarquess/some.data/master/orth0106.csv"

library(dplyr)

orth <- read.csv(url)
orth_df <- tbl_df(orth)


orth_df %.%
    group_by(Hospital) %.%
    summarise(Procs = length(Procedure), SSIs = sum(SSI))

## Source: local data frame [18 x 3]
## 
##    Hospital Procs SSIs
## 1         A   865   80
## 2         B  1069   38
## 3         C   796   24
## 4         D   891   35
## 5         E   997   39
## 6         F   550   30
## 7         G  2598  128
## 8         H   373   27
## 9         I  1079   70
## 10        J   714   30
## 11        K   477   30
## 12        L   227    2
## 13        M   125    6
## 14        N   589   38
## 15        O   292    3
## 16        P   149    9
## 17        Q  1984   52
## 18        R   351   13

无论如何,这看起来像是一个 RStudio 或 dplyr 错误。我会向哈德利提出一个问题,因为他可能关心任何一种方式。 https://github.com/hadley/dplyr/issues

编辑这(您的第一次调用)也会导致 rgui(Windows)和终端在以下情况下崩溃:

R version 3.0.2 (2013-09-25)
Platform: i386-w64-mingw32/i386 (32-bit)

这表示哈德利和罗曼想知道的dplyr 问题。

为了得到我的第一点,我们运行:

orth_df %.%
    group_by(Hospital) %.%
    summarise(Procs = length(Procedure))

Source: local data frame [18 x 2]

   Hospital Procs
1         A   865
2         B  1069
3         C   796
4         D   891
5         E   997
6         F   550
7         G  2598
8         H   373
9         I  1079
10        J   714
11        K   477
12        L   227
13        M   125
14        N   589
15        O   292
16        P   149
17        Q  1984
18        R   351

%.% summarise(SSIs = sum(SSI)) 应该在哪里找到SSI

所以你认为正在发生的链接失败了。据我了解,%.%ggplot2 的工作方式不完全相同,但相似。在ggplot2 中,一旦您在初始映射中传递数据,您就可以稍后访问它。这里 %.% 似乎修改了抓取左边的块并像这样对其进行操作:

所以你抓住了:

   Hospital Procs
1         A   865
2         B  1069
3         C   796
.
.
.
17        Q  1984
18        R   351

当你使用%.% summarise(SSIs = sum(SSI)) 并且没有SSI 可以得到。所以想到的类比是serial vs. parallel wiring Christmas lights%.% = serialggplot() + = parallel。这是非程序员对事物的理解,R 大师可能会来告诉我我很愚蠢,但现在这是你所掌握的最好的理论。

【讨论】:

  • 卫生署!现在我明白了。新创建的df中不存在。
  • 您没有抓住重点或不了解什么是链接。查看我最新的图片编辑。
  • 我现在明白了。感谢您指出了这一点。我会报告这个错误。
  • 感谢您提出问题。但是,我相信它已经在开发版本中修复了。
  • @Romain 你是对的。正如我在报告中所述,它现在会引发错误。
猜你喜欢
  • 2015-09-09
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多