我最近开始使用multidplyr来加快大型数据集的计算速度,并收到一条警告消息,以前我在使用标准dplyr时看不到该消息。该警告出现在第一次调用mutlidplyr的实例上,然后除非再次启动R的新会话,否则不会再次出现。即使警告并没有破坏代码,我也想知道是什么原因引起的以及如何将其删除。
许多讨论此错误的消息人士均未安装multidplyr和dplyr的最新版本作为警告原因。确保两者都是最新的之后,仍然会发出警告。
有人援引警告来自调用partition()和group_by(),而不是将所有分组变量都提供给partition()调用。确保我的代码不是这种情况后,仍然会出现警告。
这是一个可复制的示例,该示例基于我在实际项目中对multidplyr的使用,并在运行代码后显示警告消息。选择行数是为了使此示例运行得相当快,但是我经常使用的数据帧却有多达800万个。数据帧的列数和类别表示那些常用数据帧。在底部,显示我的会话信息。
library(foreach)
library(dplyr)
library(multidplyr)
library(parallel)
library(doParallel)
set.seed(1)
rows = 20000
cols = 9
cluster <- makeCluster(11)
registerDoParallel(cluster)
tmpData <- as.data.frame(foreach(i = 1:rows, .combine = "rbind") %dopar% {
c(sample(c("CCCCCC","OOOO"),1),
as.character(sample(c(5000:7000),1)),
as.character(sample(c(5000:7000),1)),
as.numeric(sample(c(2000:3000),1)),
as.numeric(sample(c(2000:3000),1)),
as.numeric(sample(c(25000000:25000033),1)),
sample(c(1:25),1),
sample(c(60:1800),1),
sample(c(1:100),1))
})
stopCluster(cluster)
colnames(tmpData) <- c("V1","V2","V3","V4","V5","V6","V7","V8","V9")
rownames(tmpData) <- NULL
tmpData$V1 <- as.character(tmpData$V1)
tmpData$V2 <- as.character(tmpData$V2)
tmpData$V3 <- as.character(tmpData$V3)
tmpData$V4 <- as.numeric(levels(tmpData$V4)[tmpData$V4])
tmpData$V5 <- as.numeric(levels(tmpData$V5)[tmpData$V5])
tmpData$V6 <- as.numeric(levels(tmpData$V6)[tmpData$V6])
tmpData$V7 <- as.integer(levels(tmpData$V7)[tmpData$V7])
tmpData$V8 <- as.numeric(levels(tmpData$V8)[tmpData$V8])
tmpData$V9 <- as.numeric(levels(tmpData$V9)[tmpData$V9])
cluster <- create_cluster(11)
createdDF <- tmpData %>%
partition(V6, V2, V3, V5, V4, cluster = cluster) %>%
summarize(Data1 = sum(V7), Data2 = sum(V8), Data3 = n()) %>%
collect()
# Warning message:
# group_indices_.grouped_df ignores extra arguments
stopCluster(cluster)
sessionInfo()
# R version 3.5.1 (2018-07-02)
# Platform: x86_64-redhat-linux-gnu (64-bit)
# Running under: CentOS Linux 7 (Core)
#
# Matrix products: default
# BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
#
# locale:
# [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
# [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
# [9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#
# attached base packages:
# [1] parallel stats graphics grDevices utils datasets methods base
#
# other attached packages:
# [1] doParallel_1.0.14 iterators_1.0.10 multidplyr_0.0.0.9000 dplyr_0.8.0.1 foreach_1.4.4
#
# loaded via a namespace (and not attached):
# [1] Rcpp_1.0.1 codetools_0.2-16 crayon_1.3.4 assertthat_0.2.1 R6_2.4.0 magrittr_1.5 pillar_1.3.1
# [8] rlang_0.3.3 lazyeval_0.2.2 rstudioapi_0.10 tools_3.5.1 glue_1.3.1 purrr_0.3.2 yaml_2.2.0
# [15] compiler_3.5.1 pkgconfig_2.0.2 tidyselect_0.2.5 tibble_2.1.1
我希望能够开始一个新的R会话,运行示例代码,并且不出现警告。任何帮助将不胜感激!