安装Rcartogram包 - 错误消息

时间:2015-07-24 14:26:40

标签: r windows cartogram

我正在尝试制作像here

这样的制图

从链接安装不起作用:

`install.packages('Rcartogram', repos = 'http://www.omegahat.org/R', type = 'source')`
Installing package into ‘C:/Users/Milena/Documents/R/win-library/3.2’
(as `lib` is unspecified)

Warning in install.packages :
  package ‘Rcartogram’ is not available (for R version 3.2.0)

也不是来自zip文件:

  

install.packages("C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz", repos = NULL, type = "source")

     

将软件包安装到'C:/Users/Milena/Documents/R/win-library/3.2'   (由于lib未指定)   *安装Rcartogram ...   **********************************************
WARNING: this package has a configure script It probably needs manual configuration **********************************************

     

** libs

     

*** arch - i386警告:运行命令'make -f“Makevars”-f“C:/PROGRA~1/R/R-3.2.0/etc/i386/Makeconf”-f   “C:/PROGRA~1/R/R-3.2.0/share/make/winshlib.mk”SHLIB =“Rcartogram.dll”   OBJECTS =“Rcart.o cart.o”'状态为127 ERROR:编译失败   包'Rcartogram'   *删除'C:/Users/Milena/Documents/R/win-library/3.2/Rcartogram'警告install.packages:running命令   '“C:/PROGRA~1/R/R-3.2.0/bin/x64/R”CMD INSTALL -l   “C:\用户\米莱娜\文件\ r \赢库\ 3.2”   “C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz”'的状态为1   install.packages中的警告:安装包   'C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz'有非零退出   状态

我该如何解决这个问题?

我正在使用 Windows 计算机。

感谢所有花时间查询这个问题的人。

这是我的sessionInfo

R version 3.2.0 (2015-04-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252    LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

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

other attached packages:
[1] fftw_1.0-3

loaded via a namespace (and not attached):
[1] tools_3.2.0

2 个答案:

答案 0 :(得分:15)

在Windows上安装Rcartogram

Rcartogram是一个R包(由Duncan Temple Lang提供),其主要目的是为一些C代码(由Mark Newman编写)提供R包装器,它实际上完成了构建制图(也就是变形地图)的工作。 Mark Newman编写的C代码利用了FFTW(西方最快的傅立叶变换)编译库。

Truc Viet Le的问题链接描述了如何在 Unix 系统上安装Rcartogram。将Rcartogram放到 Windows 系统中还有一些额外的技巧和陷阱,尽管从本质上讲,它几乎是相同的过程。

要在Windows系统上安装Rcartogram,首先需要安装所有先决条件,即:

  • Rtools程序套件(您需要能够在Windows机器上安装任何涉及C代码的R软件包),并且
  • FFTW库(Rcartogram代码使用)。

当你第一次安装Rcartogram时,你需要告诉R在哪里找到FFTW库,当你加载Rcartogram时,你几乎肯定需要让R知道在哪里找到FFTW库,例如通过library(Rcartogram)在R会议中。

我发现我还需要对Rcartogram R代码进行一些非常小的更改(主要是为了使它与R语法的更改一致,因为它已被编写)以便快速安装并正确运行视窗。

所以完整的答案包括几个步骤。

步骤1:安装Rtools套件

我怀疑您需要安装Rtools才能超过状态127错误。有关如何执行此操作的官方说明,请访问http://cran.r-project.org/doc/manuals/R-admin.html#The-Windows-toolset。有关如何将Rtools安装到Web上其他位置的Windows系统的用户友好解释 - 请参阅例如https://github.com/stan-dev/rstan/wiki/Install-Rtools-for-Windows。 (官方说明告诉你如何安装许多其他东西,如果你想在Windows上从源代码构建R本身,或者使用LaTeX生成包文档,你需要它,但你不需要所有这些东西到让Rcartogram工作)。

更长的回答: 我现在可以通过从我的PATH中删除对Rtools所在目录的引用来复制你的status 127 error ---。当我这样做时,Windows cmd shell(您可能在其中键入R CMD INSTALL …)找不到Rtools可执行文件,这会导致127错误消息。同样,尝试从R中运行install.packages()也会失败方式,因为在引擎盖install.packages下调用Windows cmd shell。

你为什么需要Rtools?好的Rcartogram是一个包含C代码和纯R代码的软件包。实际上它主要是C代码 - 来自Mark Newman。从源代码安装包含C代码的包需要C编译器。事实上,最好(几乎必不可少)它是与R本身构建的C编译器相同的。这就是Rtools的主要功能 - 可以在Windows版本的C编译器上安装。在Windows中运行C编译器也需要一些额外的shell命令(也称为小程序),这就是Rtools的其余部分。大多数(开源)C社区似乎在Unix(或其变体)世界中工作,那些额外的命令(实际上是C编译器本身)是Unix中“标准”系统的一部分。我们这些只在Windows工作的人需要安装Rtools,这是从Unix到Windows的必备工具的端口。

步骤2:安装FFTW库

最初我从这里http://www.fftw.org/获得了FFTW库。

有两个版本,32位版本和64位版本。在Windows 64位计算机上,您需要两个版本。 (除此之外,通过设置Rcartogram时设置标志,可能有一种方法可以只使用一个,但我还没有测试过这条路线)。将32位版本解压缩到子目录/i386中,将64位版本解压缩到子目录/x64中。在我的情况下(见下文),我将它们作为" C:/ msys / fftwtest"的子目录。 (除了这些子目录是R使用的约定 - 理论上你可以将它们放在别处,但为什么会造成额外的复杂性!)。

困扰我一段时间的一个陷阱是这些库是动态库(即.dll),所以 - 稍后 - 我需要确保当我将它们安装到我的电脑上时,我将它们放在那些位置在我的PATH上(或者我通过添加位置 - 也就是目录 - 安装它们来改变我的PATH),因为否则我在R完成安装包之前的最终检查中得到了非常无益的错误消息。 32位和64位(子)目录都应包含在PATH中。

步骤3:告诉R在哪里找到FFTW库

告诉R(在Windows机器上)在尝试安装Rcartogram时在哪里找到FFTW库的技巧是将src/Makevars.win文件添加到Rcartogram包的src子目录中。这意味着您必须先解压缩并解压缩Rcartogram tar.gz文件,然后才能进行此更改。 (旁白:我使用7zip在我的机器上解压缩这些类型的文件。)

我的src / Makevars.win文件(它是一个文本文件)有2行,

PKG_CPPFLAGS=-I"C:\msys\fftwtest\x64\include"   -DNOPROGRESS 
PKG_LIBS=-L"C:\msys\fftwtest\x64\lib" -L"C:\msys\fftwtest\i386\lib" -lfftw3 -lm

引号中的文件名是我放置FFTW库版本的地方。 (这些并不是我下载的,就像我学习如何从源代码编译FFTW,并制作了我自己的副本,但解释如何做到这一点是一个冗长的故事所以我不会尝试它这里)。

PKG_CPPFLAGS行中提到的目录是包含C预处理器所需的名为 fftw3.h 的头文件的目录。无论你指向32位(\ i386子目录)还是64位(\ x64子目录)都没关系 - fftw3.h文件是一个C源文件,无论安装什么架构R都是一样的对

PKG_LIBS行中提到的2个目录是可以找到名为 libfftw3.something 的文件的目录,以及链接器在编译步骤结束时将所有内容放在一起时所需的目录。 某些可能是" .dll" (在这种情况下,子目录可能是\ bin而不是\ lib),或者它可能是" .a"或" .la" (当我学习如何从源代码编译FFTW时,这就是R在使用我创建的静态FFTW库时所寻找的)。

需要2个目录,因为R默认尝试在Windows机器上安装32位和64位版本的Rcartogram。如果你提供.dll格式的FFTW库文件,那么这些是你的PATH必须完全相同的库(因为当你尝试做库(Rcartogram)时,R需要在加载已安装的时再次找到FFTW dll库Rcartogram包)(除此之外,为什么最后我编译了自己的静态FFTW库,所以我不必在Windows环境中弄乱我的PATH变量。)

如果您使用上面链接中下载的二进制文件,则fftw3.h和libfftw3.dll文件 都在同一个(子)目录中, libfftw3.dll文件实际上称为 libfftw3-3.dll ,所以在这种情况下你的src / Makevars.win文件需要是:

PKG_CPPFLAGS=-I"main libfftw directory\x64"   -DNOPROGRESS 
PKG_LIBS=-L"main libfftw directory\x64" -L"main libfftw directory\i386"  -lfftw3-3 -lm

与我的src / Makevars.win的主要区别是:

  • 插入main libfftw directory的名称 - 即解压缩下载的FFTW二进制文件时创建/i386/x64子目录的父目录
  • 删除\include\lib子子目录,
  • -libfftw3更改为-libfftw3-3(另请注意必须-(减号)前面-L(减号)符号前面的空格{1}}和-l标志)。

Makevars.win文件在做什么?当它试图在Rcartogram的src子目录中预处理,编译和链接C代码时,它告诉R安装过程 flags PKG_CPPFLAGS的值是C预处理器的一组标志,PKG_LIBS的值是链接步骤的一组标志。

  • -I是一个标记,表示当C预处理器正在查找包含文件时,请尝试查看以下目录,因此在上面的示例中,它说要查看{ {1}}。它寻找的包含文件是"main libfftw directory\x64"(该文件名隐藏在Rcartogram内的C代码中)
  • fftw3.h标志显示当链接器正在查找您希望使用的任何库中的文件时,请尝试查看以下目录,因此-L表示尝试查看-L"main libfftw directory\x64"目录。您可以(并且需要)在该搜索路径上拥有多个目录 - 链接器只是一直查找,直到找到它要查找的内容(或者用尽地点查看并给出错误消息),并且
  • "main libfftw directory\x64"标志给出了链接器应该查找的库文件的名称,但不是逐字的 - 而是根据您从(稍微疯狂的)惯例中输入的内容构造名称。 unix世界。因为库总是的文件名以“lib”开头,所以约定的第一部分是你留下" lib"你放在国旗上的名字。库的文件名可以有几个不同的扩展名(例如“.dll”或“.a”),因此约定的第二部分是您将文件扩展名保留在-l标志值之外好吧,让链接器理清它想要的东西。因此,-l表示要查找名为–lfftw3的文件或名为libfftw3.dll的文件(可能还有其他可能的扩展名,我不确定)。

下载的dll实际上称为libfftw3.a,(与我自己编译的dll不同,称为libfftw3-3.dll)因此需要将libfftw3.a标志更改为–l

NB 如果您使用下载的使用–lfftw3-3的FFTW库,请确保您已将它们放在PATH上(请参阅第2步的最后一段)。

步骤4:对Rcartogram C代码的小修正

我发现还有两个小的变化,我必须对Rcartogram代码本身进行操作。

首先在文件R / cart.R中有两行,两行都使用.dll函数。我需要在.Call( )函数中再添加一个参数(即PACKAGE = "Rcartogram"),例如

.Call

成了

tmp = .Call("R_makecartogram", popEls, x, y, dim, as.numeric(blur))

同样,进一步向下推车.R改变后的tmp = .Call("R_makecartogram", popEls, x, y, dim, as.numeric(blur), PACKAGE = "Rcartogram") 变为

.Call

第二,再次在R / cart.R中,我不得不改变

.Call("R_predict", object, as.numeric(x),  as.numeric(y), ans, dim(object$x), PACKAGE = "Rcartogram")

tmp = rep(as.numeric(NA), length(x))
ans = list(x = tmp, y = tmp)

这个给我带来了很多工作要找,但没有它,Rcartogram的演示给出了错误的结果(即使它运行正常)。

步骤5:实际安装Rcartogram

您现在应该可以安装Rcartogram了。

  • 打开cmd窗口,将目录(# Avoid problems with the same vector (tmp) being sent to C twice due to R's # copy-on-modify rules tmp_x = rep(as.numeric(NA), length(x)) tmp_y = rep(as.numeric(NA), length(y)) ans = list(x = tmp_x, y = tmp_y) )更改为解压缩和修改的Rcartogram包源代码所在的位置,然后键入cd

  • 启动R会话,将工作目录设置为Rcartogram源所在的位置并键入R CMD INSTALL --preclean .

install.packages(".", repos = NULL, type = 'source', INSTALL_opts = "--preclean")有效,因为您已将.编辑到Rcartogram源代码所在的目录。 cd标志告诉R整理先前(失败)尝试在Rcartogram开始之前编译C代码的任何剩余中间文件。如果你做到这一点并且仍然遇到问题,那么也可以添加--preclean标志。它提供了有关安装失败原因的更多详细信息。

第6步:享受变形地图

我刚刚开始实际使用Rcartogram(我花了一些时间才能做到这一点!),但你可能想查看getcartr --- R package。该套餐使用Rcartogram,看起来很整洁! 并且 github网站上给出的安装说明第一次为我工作(我已经安装了devtools并且正常工作)。

希望这会有所帮助(并祝贺任何读过这篇文章的人)

2017年5月更新

我现在已经做了几年了(所以不能保证它仍然可以工作),但在我上面写这篇文章之后,我在https://github.com/Geoff99/Rcartogram/tree/WindowsInstall创建了一个RCartogram的分叉副本。

请参阅包含

的WindowsInstall分支

(要使用本教程,您需要使用分叉存储库的WindowsInstall分支!)

答案 1 :(得分:0)

要安装Rcartogram,您需要从网站http://www.omegahat.org/Rcartogram/下载该软件包并从源代码安装。打开终端(在Windows中,它称为命令提示符),将目录更改为下载文件所在的位置并键入:R CMD INSTALL Rcartogram_0.2-2.tar.gz

该命令是从源安装R包。为此,您需要一个有效的C编译器。从您的错误消息中,您的C编译器看起来有些问题。确保它是否有效(或者你有一个)。看看这个问题:C compiler for Windows?