【发布时间】:2014-10-07 12:20:52
【问题描述】:
引用刚刚在 dplyr 中创建的列适用于 tbl_dfs,但不适用于 data.tables。这是预期的吗?我在文档中没有看到这方面的说明。
这是可重现的示例:
library("hflights")
library("plyr")
library("dplyr")
library("data.table")
hflights_df <- tbl_df(hflights)
summarise(hflights_df,
delay = mean(DepDelay, na.rm = TRUE),
delay2 = 2*delay)
## Source: local data frame [1 x 2]
##
## delay delay2
## 1 9.444951 18.8899
hflights_dt <- data.table(hflights_df)
summarise(hflights_dt,
delay = mean(DepDelay, na.rm = TRUE),
delay2 = 2*delay)
## Error in eval(expr, envir, enclos) : object 'delay' not found
这是我的会话信息:
sessionInfo()
## R version 3.0.2 (2013-09-25)
## Platform: x86_64-apple-darwin10.8.0 (64-bit)
##
## locale:
## [1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] data.table_1.9.2 dplyr_0.2 plyr_1.8.1 hflights_0.1
## [5] andRstuff_1.0 devtools_1.5.0.99 tikzDevice_0.7.0 filehash_2.2-2
##
## loaded via a namespace (and not attached):
## [1] assertthat_0.1 compiler_3.0.2 digest_0.6.4 evaluate_0.5.3 grid_3.0.2
## [6] httr_0.3 memoise_0.1 parallel_3.0.2 Rcpp_0.11.1 RCurl_1.95-4.1
## [11] reshape2_1.2.2 stringr_0.6.2 tools_3.0.2 whisker_0.3-2
编辑: 这有效(类似于 jazzurro 和 KFB 的建议):
summarise(tbl_df(hflights_dt),
delay = mean(DepDelay, na.rm = TRUE),
delay2 = 2*delay)
## Source: local data frame [1 x 2]
##
## delay delay2
## 1 9.444951 18.8899
但这不起作用:
summarise(tbl_dt(hflights_dt),
delay = mean(DepDelay, na.rm = TRUE),
delay2 = 2*delay)
## Error in eval(expr, envir, enclos) : object 'delay' not found
【问题讨论】:
-
hflights_dt <- as.data.table(hflights_df)为我工作,而不是data.table(hflights_df) -
@jazzurro 谢谢,但请参阅我对 KFB 回答的评论。我只认为这是一种解决方法。
-
@Arun 谢谢。这似乎是这里的问题。我不清楚为什么它在
mutate中有效,但在summarise中无效。它是否记录在某处? -
关于文档,您必须询问 dplyr 开发人员。它与
mutate一起使用的原因是因为它们使用for 循环并通过引用分配,一次1 列。看看dplyr:::mutate_.grouped_dt。
标签: r data.table dplyr