我正在试图build立一个这样的图表
从链接安装不起作用:
`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 ********************************************************************************************
WARNING: this package has a configure script It probably needs manual configuration ************************************************库
*** 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错误:编译包'Rcartogram'失败* C:/Users/Milena/Documents/R/win-library/3.2/Rcartogram'install.packages:running command'中的警告'“C:/PROGRA~1/R/R-3.2.0/bin/x64/R” CMD INSTALL -l“C:\ Users \ Milena \ Documents \ R \ win-library \ 3.2”“C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz”'有状态1警告在安装。包:安装包“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
Rcartogram是一个R包(Duncan Temple Lang),主要目的是为一些C代码(由Mark Newman编写)提供一个R包装,它实际上是构建一个cartogram(又称为地图)的工作。 Mark Newman编写的C代码使用FFTW(西方最快的傅立叶变换)编译库。
Truc Viet Le在你的问题中的链接描述了如何在Unix系统上安装Rcartogram。 将Rcartogram放到Windows系统上还有一些额外的技巧和陷阱,尽管其核心是几乎相同的过程。
要在Windows系统上安装Rcartogram,您需要先安装所有先决条件,即:
然后,当您首次安装Rcartogram时,您需要告诉R哪里可以找到FFTW库,并且您几乎可以肯定需要让R知道在何时查找FFTW库,例如在R会话中通过library(Rcartogram)
R library(Rcartogram)
。
我发现我还需要对Rcartogram R代码进行一些非常小的更改(主要是为了使其与R语法写入后的更改保持一致),以便使其安装愉快,并在Windows上正确运行。
所以完整的答案涉及几个步骤。
我怀疑你需要安装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生成包文档,但是你不需要所有的东西来获得R视图加工)。
稍微长一点的答案:我现在可以复制你的status 127 error
—通过从我的路径删除Rtools居住的目录的引用。 当我这样做时,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编译器。 事实上,最好的(几乎是必不可少的),就是它本身就是从同一个C编译器编译而来的。 这就是Rtools的主要功能 – 可安装在C编译器的Windows版本上。 在Windows中运行C编译器需要一些额外的shell命令(又名小程序),这就是Rtools的其余部分。 大多数(开源)C社区似乎在Unix(或其变种)世界中工作,这些额外的命令(甚至C编译器本身)是Unix中“标准”系统的一部分。 只有我们这些在Windows上工作的人需要安装Rtools,这是从Unix到Windows的必要工具的一个端口。
最初我从这里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中。
告诉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的方式,并且制作了我自己的副本,但是解释怎么做是一个looong的故事,所以我不会在这里尝试)。
PKG_CPPFLAGS行中提到的目录是包含C预处理器所需的称为fftw3.h的头文件的目录。 无论您是指向32位(\ i386子目录)还是64位(\ x64子目录),fftw3.h文件都是C源文件并且无论R安装的架构都是相同的。
PKG_LIBS行中提到的2个目录是可以找到名为libfftw3.something的文件的那两个目录,并且在编译步骤结束时将所有内容放在一起时链接器需要。 可能是“.dll”(在这种情况下,子目录可能是\ bin而不是\ lib),或者它可能是“.a”或“.la”(这是R使用静态FFTW库这是我在学习如何从源代码编译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
和-l
标志的起始处每个-
(负号)前面必须有一个空格)。 什么是Makevars.win文件在做什么? 当它试图预处理,编译和链接Rcartographer的src子目录中的C代码时,它告诉R安装进程它将需要的标志 。 PKG_CPPFLAGS
的值是C预处理器的一组标志, PKG_LIBS
的值是链接步骤的一组标志。
-I
是一个标志,表示在C预处理程序正在寻找包含文件时,试着查看下面的目录,所以在上面的例子中,它要求查看"main libfftw directory\x64"
。 它所搜索的包含文件是fftw3.h
(该文件名被埋在R图的C代码中) -L
标志说:“当连接器正在从你期望使用的任何库中查找文件时,尝试查看以下目录”,因此-L"main libfftw directory\x64"
表示尝试查看"main libfftw directory\x64"
目录。 你可以(也需要)在这个搜索路径上有多于一个的目录 – 链接器只是一直查找,直到找到它正在查找的内容(或者用完的地方去寻找并给出错误信息),以及 -l
标志给出了链接器应该查找的库文件的名称,但是不是逐字的—而是这个名字是从你在unix世界中对一个(稍微疯狂的)公约中输入的内容构建的。 因为库的文件名总是以“lib”开头,所以这个约定的第一部分就是你把“lib”放在你放入标志的名字之外。 库的文件名可以有多个不同的扩展名(例如“.dll”或者“.a”),所以这个约定的第二部分是你离开文件的扩展名,让链接器分清它想要的东西。 所以–lfftw3
说找一个名为libfftw3.dll
的文件或者一个名为libfftw3.a
(可能还有其他可能的扩展名,我不确定)。 下载的DLL实际上叫做libfftw3-3.dll
,(不像我自己编译的那个,叫做libfftw3.a
),因此需要将–l
标志改为–lfftw3-3
注意如果您使用的是下载的使用.dll
的FFTW库,请确保您已将它们放在PATH上(请参阅步骤2的最后一段)。
还有另外两个小小的变化,我不得不对Rcartogram代码本身进行运行。
首先在文件R / cart.R中有两行,两行都使用.Call( )
函数。 我需要为.Call
函数添加一个参数(即PACKAGE = "Rcartogram"
),例如
tmp = .Call("R_makecartogram", popEls, x, y, dim, as.numeric(blur))
成为
tmp = .Call("R_makecartogram", popEls, x, y, dim, as.numeric(blur), PACKAGE = "Rcartogram")
同样,更进一步的购物.Call
变成了
.Call("R_predict", object, as.numeric(x), as.numeric(y), ans, dim(object$x), PACKAGE = "Rcartogram")
其次,再次在R / cart.R,我不得不改变
tmp = rep(as.numeric(NA), length(x)) ans = list(x = tmp, y = tmp)
至
# 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的演示给了错误的结果(即使它运行正常)。
您现在应该可以安装Rcartogram。 或
通过打开cmd窗口,将目录( cd
)更改为解压缩和修改的Rcartogram软件包源代码所在的位置,然后键入R CMD INSTALL --preclean .
要么
通过启动R会话,将工作目录设置到Rcartogram源的任何位置,然后输入install.packages(".", repos = NULL, type = 'source', INSTALL_opts = "--preclean")
的.
因为您已将cd
编辑到Rcartogram源代码所在的目录。 --preclean
标志告诉R整理任何剩余的中间文件,从早期的(失败的)尝试在开始之前编译R视图中的C代码。 如果你得到这么多,仍然有麻烦,还有一个可以添加 – --debug
标志。 它给出了有关为什么安装失败的更多细节。
我刚刚开始实际使用Rcartogram(我花了一段时间才弄到这么远!),但是你可能想看看getcartr — R包 。 该软件包使用Rcartogram,看起来很整洁! 在github网站上给出的安装说明对我来说是第一次(我已经有devtools安装和工作了)。
希望这有助于(并祝贺读过这个的人)
我已经有几年没有这个工作(所以不能保证它仍然会工作),但是在我写了上面的帖子之后,我在https://github.com/Geoff99/Rcartogram创建了一个RCartogram的分支副本/ tree / WindowsInstall 。
请参阅包含的WindowsInstall分支
src/Makevars.win
意味着更容易在Windows上安装RCartogram和 vignettes/README.WindowsInstall.Tutorial.Rmd
的上述文章更全面的教程。 请参阅以下链接https://github.com/Geoff99/Rcartogram/blob/WindowsInstall/vignettes/README.WindowsInstall.Tutorial.Rmd (要使用本教程,您需要使用分叉存储库的WindowsInstall分支!)
要安装Rcartogram,您需要从网站http://www.omegahat.org/Rcartogram/下载软件包并从源代码安装。 打开终端(在Windows中称为命令提示符),将目录切换到下载文件所在的位置,然后键入:R CMD INSTALL Rcartogram_0.2-2.tar.gz
该命令是从源代码安装一个R包。 你将需要一个工作C编译器的目的。 从你的错误信息看来,你的C编译器有一些问题。 确保它是否有效(或者你有)。 看看这个问题: C编译器的Windows?