Недавно я начал использовать multidplyr для ускорения вычислений на больших наборах данных и получения предупреждающего сообщения, в котором раньше я его не видел при использовании стандартного dplyr.Предупреждение появляется в первом случае вызова mutlidplyr, а затем не появляется снова, если не запущен новый сеанс R.Несмотря на то, что предупреждение не нарушает код, я хотел бы знать, что его вызывает и как его можно удалить.
Многие источники, обсуждающие эту ошибку, ссылаются на отсутствие самой последней версии multidplyr и dplyr, установленной какпричина предупреждения.Убедившись, что оба обновления были обновлены, предупреждение все еще возникает.
Некоторые считают, что предупреждение исходит от вызова partition () и group_by (), а не от того, что все переменные группировки передаются вызову partition ().Убедившись, что для моего кода это не так, появляется предупреждение.
Вот воспроизводимый пример, основанный на моем использовании multidplyr в реальном проекте, с предупреждением, включенным там, где оно появляетсяпосле запуска кода.Количество строк выбрано так, чтобы этот пример выполнялся достаточно быстро, но у фреймов данных, с которыми я часто работаю, было больше, до 8 миллионов.Число столбцов и классы фрейма данных представляют эти обычные фреймы данных.Внизу отображается информация о моей сессии.
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, запустить пример кода и не показывать предупреждение.Любая помощь будет принята с благодарностью!