web-dev-qa-db-fra.com

Comment réparer «n'a pas réussi à charger la DLL du Caire» dans R?

Je rencontre ce message d'avertissement qui arrêtera l'exécution.

Saving 8.04 x 5.67 in image
Warning messages:
1: In dev(file = filename, width = dim[1], height = dim[2], ...) :
  unable to load shared object '/usr/local/Cellar/r/3.5.0_1/lib/R/library/grDevices/libs//cairo.so':

  dlopen(/usr/local/Cellar/r/3.5.0_1/lib/R/library/grDevices/libs//cairo.so, 6): image not found
2: In dev(file = filename, width = dim[1], height = dim[2], ...) :
  failed to load cairo DLL

C'est le code qui génère cet avertissement pour moi

library(tidyverse)
library(cowplot)

d <- sample_n(diamonds, 50)
g <- ggplot(d, aes(carat, price)) + geom_point()
gg <- list(g,g,g)

plot_grid(plotlist = gg, nrow=1) %>% 
  cowplot::ggsave(filename = paste0("~/Desktop/", paste0("testing", ".svg")), device = cairo_ps)

Comment corriger cette erreur?

P.s. Je suis novice.

EDIT: Ceci est mes informations de session. Je ne sais pas si cela serait utile. Je l'ai inclus juste au cas où.

sessionInfo()

R version 3.5.0 (2018-04-23)
Platform: x86_64-Apple-darwin17.6.0 (64-bit)
Running under: macOS High Sierra 10.13.5

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

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

other attached packages:
 [1] cowplot_0.9.2     forcats_0.3.0     stringr_1.3.1     dplyr_0.7.5      
 [5] purrr_0.2.5       readr_1.1.1       tidyr_0.8.1       tibble_1.4.2     
 [9] ggplot2_2.2.1     tidyverse_1.2.1   doParallel_1.0.11 iterators_1.0.9  
[13] foreach_1.4.4     lmerTest_3.0-1    lme4_1.1-17       Matrix_1.2-14    

loaded via a namespace (and not attached):
 [1] tidyselect_0.2.4  reshape2_1.4.3    splines_3.5.0     haven_1.1.1      
 [5] lattice_0.20-35   argparse_1.1.1    colorspace_1.3-2  getopt_1.20.2    
 [9] yaml_2.1.19       rlang_0.2.1       nloptr_1.0.4      pillar_1.2.3     
[13] foreign_0.8-70    glue_1.2.0        readxl_1.1.0      modelr_0.1.2     
[17] bindrcpp_0.2.2    bindr_0.1.1       plyr_1.8.4        cellranger_1.1.0 
[21] munsell_0.4.3     findpython_1.0.3  gtable_0.2.0      rvest_0.3.2      
[25] codetools_0.2-15  psych_1.8.4       labeling_0.3      broom_0.4.4      
[29] proto_1.0.0       Rcpp_0.12.17      scales_0.5.0      jsonlite_1.5     
[33] mnormt_1.5-5      hms_0.4.2         stringi_1.2.2     numDeriv_2016.8-1
[37] grid_3.5.0        cli_1.0.0         tools_3.5.0       magrittr_1.5     
[41] lazyeval_0.2.1    crayon_1.3.4      pkgconfig_2.0.1   MASS_7.3-49      
[45] xml2_1.2.0        lubridate_1.7.4   rstudioapi_0.7    assertthat_0.2.0 
[49] minqa_1.2.4       httr_1.3.1        R6_2.2.2          nlme_3.1-137     
[53] compiler_3.5.0   
7
Nicholas Hayden

Je n'ai qu'une machine Windows à offrir, mais ce qui suit a fonctionné pour enregistrer un .svg et .eps de votre cowplot (après avoir installé le package svglite):

# install.packages(svglite)
library(tidyverse)
library(cowplot)

d <- sample_n(diamonds, 50)
g <- ggplot(d, aes(carat, price)) + geom_point()
gg <- list(g,g,g)

plot_grid(plotlist = gg, nrow=1)
ggsave(filename = "testing.svg")
ggsave(filename = "testing.eps")

Vous pouvez bien sûr modifier le nom de fichier en quelque chose comme "~/Desktop/testing.svg", selon l'endroit où vous souhaitez protéger votre parcelle. Notez que ggsave par défaut enregistre le dernier tracé actif, et la fin du nom de fichier que vous spécifiez devrait automatiquement déclencher le bon périphérique.

2
Supertasty

La version Homebrew de R ne prend plus en charge cairo ( plus d'informations ici ), donc les périphériques graphiques comme svg(), cairo_pdf() et cairo_ps() dans la base R ne fonctionnera pas. Vous devez utiliser d'autres périphériques graphiques (par exemple, png, jpeg, pdf). Si vous avez besoin d'une sortie SVG, ggsave() nécessite le package svglite et utilise svglite::svglite() pour enregistrer votre tracé dans un Fichier SVG.

4
Yihui Xie