在Mac上包含Cairo R

18

我正在尝试在Rstudio中使用'Cairo'包,使用命令install.packages('Cairo'),并且没有任何问题。 我收到了这条消息-

The downloaded binary packages are in
/var/folders/xn/c1nj85gx62b89876s15sbv9h0000gn/T//RtmpK9JM0l/downloaded_packages 

包出现在包列表中,但当我尝试使用library(Cairo)library('Cairo')来引入该包时,出现以下错误信息-
Error : .onLoad failed in loadNamespace() for 'Cairo', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.3/Resources/library/Cairo/libs/Cairo.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.3/Resources/library/Cairo/libs/Cairo.so, 6): Library not loaded: /opt/X11/lib/libXrender.1.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.3/Resources/library/Cairo/libs/Cairo.so
  Reason: image not found
Error: package or namespace load failed for ‘Cairo’

sessionInfo()

R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)

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

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

other attached packages:
[1] GenomicRanges_1.24.2 GenomeInfoDb_1.8.3   IRanges_2.6.1       
[4] S4Vectors_0.10.2     ggbio_1.20.2         BiocGenerics_0.18.0 
[7] ggplot2_2.1.0        BiocInstaller_1.22.3 shiny_0.13.2        

我不确定为什么会发生这种情况,需要帮助吗? 谢谢!


1
你是否已经安装了quartz作为你的主要X11平台?如果没有,请下载并安装它,然后重新启动你的机器。希望这能有所帮助。 - Abdou
谢谢! 我不知道,'Cairo'需要石英的原因是什么?因为当我安装软件包时从未遇到过这个问题。 - T.G.
2
我相信它一直都需要。只是在之前的 Mac 版本中,操作系统会附带一个 X11 平台的等效版本。然而,在最新的版本中并非如此。这就是为什么你必须自己获取它。你现在能够加载这个软件包了吗? - Abdou
我现在不在电脑旁边,等我回家后再处理。 - T.G.
谢谢!就像魔法一样好用! - T.G.
1
我只想补充一下,我之所以只在使用Cairo时遇到问题而其他包没有问题,是因为它是一个处理图形的包,而“XQuartz是必需的组件,它允许跨平台应用程序(其中许多不是专门为OS X设计的)在其上运行。”[维基百科] (https://en.wikipedia.org/wiki/XQuartz) - T.G.
2个回答

30

您应该下载适用于Mac的X11,也称为XQuartz。它不再随OS X一起发货,因此您必须从以下网址单独下载:https://www.xquartz.org/


2
谢谢!那确实是问题所在。 - T.G.
如果这解决了你的问题,请将其标记为解决方案,以便其他人可以轻松找到它。 - haddr
我该怎么做? 使用灰色向上箭头?(我尝试过,但得到了一些提示,因为我在这里还是新手,所以无法投票..) - T.G.
2
{btsdaf} - Sander W. van der Laan
1
@SanderW.vanderLaan 你可能已经解决了这个问题,但是我在下面发布了一个关于修复已安装XQuartz的问题的答案,可能对你有帮助。 - Chris Middleton
显示剩余2条评论

3

如果安装了XQuartz仍然无法解决问题:

检查错误信息中以“Library not loaded: ...”开头的部分。例如,在用户的问题中,错误信息包含以下行:

dlopen(/Library/Frameworks/R.framework/Versions/3.3/Resources/library/Cairo/libs/Cairo.so, 6): Library not loaded: /opt/X11/lib/libXrender.1.dylib

请注意这部分内容:
Library not loaded: /opt/X11/lib/libXrender.1.dylib

这是让我们了解有关XQuartz的部分。

然而,在我的情况下,它指定libjpeg未加载,就像这样:

Error: package or namespace load failed for ‘Cairo’:
 .onLoad failed in loadNamespace() for 'Cairo', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/usr/local/lib/R/3.5/site-library/Cairo/libs/Cairo.so':
  dlopen(/usr/local/lib/R/3.5/site-library/Cairo/libs/Cairo.so, 6): Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.9.dylib
  Referenced from: /usr/local/lib/R/3.5/site-library/Cairo/libs/Cairo.so
  Reason: image not found
Error: loading failed

请注意以下部分:
Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.9.dylib

为了解决这个问题,我必须运行:
brew unlink libjpeg; brew reinstall libjpeg

为了让它正常工作,我接着需要对libtiff做同样的事情:

brew unlink libtiff; brew reinstall libtiff

在修复这两个库之后,运行install.packages("Cairo")就可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接