how to solve "ERROR: Names must be unique." in r-package ggstatsplot?

13.3k views Asked by At

The problem:

I tried to run a function (ggwithinplot) to plot data in an r package, ggstatsplot. But it took a long time to run this function, and nothing turned out.

enter image description here

So I shut down this function while it was running. I tried waiting. It didn't work. So this problem was not a time issue.

After that, I was wondering whether it was due to that I got a large number of data points (N=2000). So I tried another sample that includes 250 data points. And this time, I got this error: "ERROR: Names must be unique."

ERROR: Names must be unique. Backtrace: 
1. ggstatsplot::ggwithinstats(...) 
27. vctrs:::validate_unique(names = names) 
28. vctrs:::stop_names_must_be_unique(which(duplicated(names))) 
29. vctrs:::stop_names(...) 
30. vctrs:::stop_vctrs(...)

And I checked traceback:

33.stop(fallback)
32.signal_abort(cnd)
31.abort(message, class = c(class, "vctrs_error"), ...)
30.stop_vctrs(message, class = c(class, "vctrs_error_names"), locations = locations, ...)
29.stop_names("Names must be unique.", class = "vctrs_error_names_must_be_unique", locations = locations)
28.stop_names_must_be_unique(which(duplicated(names)))
27.validate_unique(names = names)
26.vctrs::vec_as_names(names, repair = "check_unique")
25.withCallingHandlers(expr, simpleError = function(cnd) { abort(conditionMessage(cnd), parent = cnd) })
24.instrument_base_errors(expr)
23.doTryCatch(return(expr), name, parentenv, handler)
22.tryCatchOne(expr, names, parentenv, handlers[[1L]])
21.tryCatchList(expr, classes, parentenv, handlers)
20.tryCatch(instrument_base_errors(expr), vctrs_error_subscript = function(cnd) { cnd$subscript_action <- subscript_action(type) cnd$subscript_elt <- "column" cnd_signal(cnd) ...
19.with_subscript_errors(vctrs::vec_as_names(names, repair = "check_unique"))
18.rename_impl(NULL, .vars, quo(c(...)), strict = .strict)
17.tidyselect::vars_rename(names(.data), !!!enquos(...))
16.rename.data.frame(.data = ., variable = skim_variable)
15.dplyr::rename(.data = ., variable = skim_variable)
14.function_list[[k]](value)
13.withVisible(function_list[[k]](value))
12.freduce(value, `_function_list`)
11.`_fseq`(`_lhs`)
10.eval(quote(`_fseq`(`_lhs`)), env, env)
9.eval(quote(`_fseq`(`_lhs`)), env, env)
8.withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
7.dplyr::left_join(x = df_results %>% dplyr::group_modify(.f = ~tibble::as_tibble(skimr::skim(purrr::keep(.x = ., .p = ..f))), keep = FALSE) %>% dplyr::ungroup(x = .), y = dplyr::tally(df_results), by = purrr::map_chr(.x = grouping.vars, .f = rlang::as_string)) %>% dplyr::mutate(.data = ., n = n - n_missing) %>% purrr::set_names(x = ., ...
6.groupedstats::grouped_summary(data = data, grouping.vars = { { x } ...
5.eval(lhs, parent, parent)
4.eval(lhs, parent, parent)
3.groupedstats::grouped_summary(data = data, grouping.vars = { { x } ...
2.mean_labeller(data = data, x = { { x } ...
1.ggwithinstats(data = emotion_rating_dt_50, x = variable, y = Emotion_rating, point.path = FALSE, mean.path = FALSE, effsize.type = "partial_eta", p.adjust.method = "fdr", ggtheme = theme_classic(), palette = "Darjeeling2", package = "wesanderson", ggstatsplot.layer = FALSE, xlab = "Dilemma types"

What I have tried:

  1. I googled about this error. Did not get much helpful information.
  2. I updated r-base and all r packages. Not worked.
  3. I checked whether this problem was specific to ggwithinplot. And I found ggbetweenplot worked well even in the large sample (N=2000).
  4. I checked whether it was due to problems with the input data, which is required to be long-format. I did not find anything dubious.
  5. I checked whether the names of columns in the data frame duplicated. No. So I was really confused about the meaning of "name must be unique."

reprex

library("tidyverse")
library("ggstatsplot")
#> Registered S3 methods overwritten by 'broom.mixed':
#>   method         from 
#>   augment.lme    broom
#>   augment.merMod broom
#>   glance.lme     broom
#>   glance.merMod  broom
#>   glance.stanreg broom
#>   tidy.brmsfit   broom
#>   tidy.gamlss    broom
#>   tidy.lme       broom
#>   tidy.merMod    broom
#>   tidy.rjags     broom
#>   tidy.stanfit   broom
#>   tidy.stanreg   broom
#> Registered S3 methods overwritten by 'car':
#>   method                          from
#>   influence.merMod                lme4
#>   cooks.distance.influence.merMod lme4
#>   dfbeta.influence.merMod         lme4
#>   dfbetas.influence.merMod        lme4
library("bruceR")
#> 载入需要的程辑包:rio
#> 载入需要的程辑包:data.table
#> 
#> 载入程辑包:'data.table'
#> The following objects are masked from 'package:dplyr':
#> 
#>     between, first, last
#> The following object is masked from 'package:purrr':
#> 
#>     transpose
#> 载入需要的程辑包:psych
#> 
#> 载入程辑包:'psych'
#> The following objects are masked from 'package:ggplot2':
#> 
#>     %+%, alpha
#> 载入需要的程辑包:lubridate
#> 
#> 载入程辑包:'lubridate'
#> The following objects are masked from 'package:data.table':
#> 
#>     hour, isoweek, mday, minute, month, quarter, second, wday, week,
#>     yday, year
#> The following object is masked from 'package:base':
#> 
#>     date
#> 载入需要的程辑包:performance
#> Registered S3 methods overwritten by 'huge':
#>   method    from   
#>   plot.sim  BDgraph
#>   print.sim BDgraph
#> Registered S3 method overwritten by 'GGally':
#>   method from   
#>   +.gg   ggplot2
#> ========================================================
#> BRoadly Useful Collections and Extensions of R functions
#> ========================================================
#> Loaded packages:
#> <U+2714> bruceR (version 0.4.0)
#> <U+2714> rio, dplyr, data.table, psych, stringr, lubridate, performance, ggplot2
#> Update:
#> devtools::install_github("psychbruce/bruceR")
#> Citation:
#> Bao, H.-W.-S. (2020). bruceR: Broadly useful collections and extensions of R functions (version 0.4.0). Retrieved from https://github.com/psychbruce/bruceR
data <- import("E:/Zengxiaoyu/zxy_projcet/!ncov/data/Covid_Q1Q2data_minus200_0316.xlsx")
#> New names:
#> * hubei -> hubei...1396
data$hubei<-data$hubei...666
data$hubei <- as.factor(data$hubei)
#data frame
emotion_df <- data.frame(data$N1_disself,data$N1_disFAMI,data$N1_disHB,data$hubei)

emotion_df <- as.data.table(emotion_df)

#data preparation for repeated measure

long_emotion_rating_dt<-tidyr::pivot_longer(emotion_df, 1:3,names_to = 'variable', values_to = "Emotion_rating")

emotion_rating_dt_50<-subset(long_emotion_rating_dt,data.hubei=="HuBei")
# to plot
grid::grid.newpage()
ggwithinstats(
  data = emotion_rating_dt_50,
  x = variable, # > 2 groups
  y = Emotion_rating,
  point.path = FALSE,
  mean.path = FALSE,
  effsize.type = 'partial_eta' ,
  p.adjust.method = "fdr",
  ggtheme = theme_classic(),
  palette = "Darjeeling2",
  package = "wesanderson",
  ggstatsplot.layer = FALSE,
  xlab = "Dilemma types", 
  ylab = "Emotion rating(1=appealing,7=appaling)",
  title = "Emotion rating for fout types moral dilemmas"
)
#> Note: 95% CI for effect size estimate was computed with 100 bootstrap samples.
#> 
#> Error: Names must be unique.
Created on 2020-03-17 by the reprex package (v0.3.0)

data farame

input dataframe

session info

R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 15063)

Matrix products: default

locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936  LC_CTYPE=Chinese (Simplified)_China.936   
[3] LC_MONETARY=Chinese (Simplified)_China.936 LC_NUMERIC=C                              
[5] LC_TIME=Chinese (Simplified)_China.936    

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

other attached packages:
 [1] sessioninfo_1.1.1  reprex_0.3.0       reshape_0.8.8      gginnards_0.0.3    VGAM_1.1-2         parameters_0.6.0  
 [7] nnet_7.3-13        openxlsx_4.1.4     summarytools_0.9.6 ggcorrplot_0.1.3   bruceR_0.4.0       performance_0.4.4 
[13] lubridate_1.7.4    psych_1.9.12.31    data.table_1.12.8  rio_0.5.16         ggstatsplot_0.3.1  forcats_0.5.0     
[19] stringr_1.4.0      dplyr_0.8.5        purrr_0.3.3        readr_1.3.1        tidyr_1.0.2        tibble_2.1.3      
[25] ggplot2_3.3.0      tidyverse_1.3.0    drawMap_0.1.0     

loaded via a namespace (and not attached):
  [1] estimability_1.3          GGally_1.4.0              lavaan_0.6-5              coda_0.19-3              
  [5] acepack_1.4.1             knitr_1.28                multcomp_1.4-12           rpart_4.1-15             
  [9] inline_0.3.15             generics_0.0.2            callr_3.4.2               cowplot_1.0.0            
 [13] TH.data_1.0-10            xml2_1.2.5                httpuv_1.5.2              StanHeaders_2.21.0-1     
 [17] assertthat_0.2.1          d3Network_0.5.2.1         WRS2_1.0-0                xfun_0.12                
 [21] hms_0.5.3                 evaluate_0.14             promises_1.1.0            fansi_0.4.1              
 [25] dbplyr_1.4.2              readxl_1.3.1              igraph_1.2.4.2            htmlwidgets_1.5.1        
 [29] DBI_1.1.0                 Rsolnp_1.16               ellipsis_0.3.0            paletteer_1.1.0          
 [33] rcompanion_2.3.25         backports_1.1.5           pbivnorm_0.6.0            insight_0.8.2            
 [37] rapportools_1.0           libcoin_1.0-5             jmvcore_1.2.5             vctrs_0.2.4              
 [41] sjlabelled_1.1.3          abind_1.4-5               withr_2.1.2               pryr_0.1.4               
 [45] metaBMA_0.6.2             checkmate_2.0.0           bdsmatrix_1.3-4           emmeans_1.4.5            
 [49] fdrtool_1.2.15            prettyunits_1.1.1         fastGHQuad_1.0            mnormt_1.5-6             
 [53] cluster_2.1.0             mi_1.0                    crayon_1.3.4              pkgconfig_2.0.3          
 [57] nlme_3.1-145              statsExpressions_0.3.1    palr_0.2.0                pals_1.6                 
 [61] rlang_0.4.5               lifecycle_0.2.0           miniUI_0.1.1.1            groupedstats_0.2.0       
 [65] skimr_2.1                 LaplacesDemon_16.1.4      MatrixModels_0.4-1        sandwich_2.5-1           
 [69] kutils_1.69               EMT_1.1                   modelr_0.1.6              dichromat_2.0-0          
 [73] tcltk_3.6.3               cellranger_1.1.0          matrixStats_0.56.0        broomExtra_2.5.0         
 [77] lmtest_0.9-37             Matrix_1.2-18             regsem_1.5.2              loo_2.2.0                
 [81] mc2d_0.1-18               carData_3.0-3             boot_1.3-24               zoo_1.8-7                
 [85] base64enc_0.1-3           whisker_0.4               processx_3.4.2            png_0.1-7                
 [89] viridisLite_0.3.0         rjson_0.2.20              oompaBase_3.2.9           pander_0.6.3             
 [93] ggExtra_0.9               afex_0.26-0               multcompView_0.1-8        coin_1.3-1               
 [97] arm_1.10-1                jpeg_0.1-8.1              rockchalk_1.8.144         ggsignif_0.6.0           
[101] scales_1.1.0              magrittr_1.5              plyr_1.8.6                compiler_3.6.3           
[105] rstantools_2.0.0          bbmle_1.0.23.1            RColorBrewer_1.1-2        lme4_1.1-21              
[109] cli_2.0.2                 lmerTest_3.1-1            pbapply_1.4-2             ps_1.3.2                 
[113] TMB_1.7.16                Brobdingnag_1.2-6         htmlTable_1.13.3          Formula_1.2-3            
[117] MASS_7.3-51.5             mgcv_1.8-31               tidyselect_1.0.0          stringi_1.4.6            
[121] lisrelToR_0.1.4           sem_3.1-9                 jtools_2.0.2              OpenMx_2.17.3            
[125] latticeExtra_0.6-29       ggrepel_0.8.2             bridgesampling_1.0-0      grid_3.6.3               
[129] tools_3.6.3               parallel_3.6.3            matrixcalc_1.0-3          rstudioapi_0.11          
[133] foreign_0.8-76            gridExtra_2.3             ipmisc_1.2.0              pairwiseComparisons_0.2.5
[137] BDgraph_2.62              digest_0.6.25             shiny_1.4.0.2             nortest_1.0-4            
[141] jmv_1.2.5                 Rcpp_1.0.3                car_3.0-7                 broom_0.5.5              
[145] metafor_2.1-0             ez_4.4-0                  BayesFactor_0.9.12-4.2    metaplus_0.7-11          
[149] later_1.0.0               httr_1.4.1                effectsize_0.2.0          sjstats_0.17.9           
[153] colorspace_1.4-1          rvest_0.3.5               XML_3.99-0.3              fs_1.3.2                 
[157] truncnorm_1.0-8           rematch2_2.1.0            expm_0.999-4              mapproj_1.2.7            
[161] jcolors_0.0.4             MuMIn_1.43.15             xtable_1.8-4              jsonlite_1.6.1           
[165] nloptr_1.2.2.1            corpcor_1.6.9             rstan_2.19.3              glasso_1.11              
[169] zeallot_0.1.0             modeltools_0.2-23         scico_1.1.0               R6_2.4.1                 
[173] Hmisc_4.3-1               broom.mixed_0.2.4         pillar_1.4.3              htmltools_0.4.0          
[177] mime_0.9                  glue_1.3.2                fastmap_1.0.1             minqa_1.2.4              
[181] codetools_0.2-16          maps_3.3.0                pkgbuild_1.0.6            mvtnorm_1.1-0            
[185] lattice_0.20-40           numDeriv_2016.8-1.1       huge_1.3.4                curl_4.3                 
[189] DescTools_0.99.34         gtools_3.8.1              clipr_0.7.0               magick_2.3               
[193] logspline_2.1.15          zip_2.0.4                 survival_3.1-11           rmarkdown_2.1            
[197] qgraph_1.6.5              repr_1.1.0                munsell_0.5.0             semPlot_1.1.2            
[201] sjmisc_2.8.3              haven_2.2.0               reshape2_1.4.3            gtable_0.3.0             
[205] bayestestR_0.5.2     

Github issue for this problem:

https://github.com/IndrajeetPatil/ggstatsplot/issues/396

2

There are 2 answers

0
Jon Kingzette On

I got this error because there were two identical variable names in my data set. Once I renamed one of them, the error was resolved.

1
Xiaoyu Zeng On

@IndrajeetPatil figured it out.

This is because the dataframe contains a column called "variable".

The easiest way to fix this problem is to change the name of "variable" in the dataframe. It works for me.

https://github.com/IndrajeetPatil/groupedstats/issues/24