安装 Rcartogram 包 - 错误信息
installing Rcartogram packages - error message
我正在尝试构建像 here
这样的制图
从 link 安装不工作:
`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)
压缩文件中都没有:
install.packages("C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz",
repos = NULL, type = "source")
Installing package into ‘C:/Users/Milena/Documents/R/win-library/3.2’
(as lib
is unspecified)
* installing source package Rcartogram
...
**********************************************<br>
WARNING: this
package has a configure script
It probably needs manual configuration **********************************************
** libs
*** arch - i386 Warning: running command '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"' had status 127 ERROR: compilation failed for
package 'Rcartogram'
* removing 'C:/Users/Milena/Documents/R/win-library/3.2/Rcartogram' Warning in 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.2"
"C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz"' had status 1
Warning in install.packages : installation of package
‘C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz’ had non-zero exit
status
我该如何解决这个问题?
我正在 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,您需要从网站 http://www.omegahat.org/Rcartogram/ 下载软件包并从源代码安装。打开您的终端(在 Windows 中,它称为命令提示符),将目录更改为下载文件所在的位置并键入:R CMD INSTALL Rcartogram_0.2-2.tar.gz
该命令是从源安装 R 包。为此,您需要一个可用的 C 编译器。从您的错误消息来看,您似乎在使用我们的 C 编译器时遇到了一些问题。确保它是否有效(或者你有一个)。看看这个问题:C compiler for Windows?
正在 Windows
安装 Rcartogram
Rcartogram 是一个 R 包(由 Duncan Temple Lang 开发),其主要目的是为一些 C 代码(由 Mark Newman 编写)提供一个 R 包装器,它实际上完成了构建制图(又名变形地图)的工作). Mark Newman写的C代码利用了FFTW(西方最快的Fourier T运行sform)编译库
Truc Viet Le 提出的问题中的 link 描述了如何在 Unix 系统上安装 Rcartogram。将 Rcartogram 引入 Windows 系统还涉及一些额外的技巧和陷阱,尽管其核心过程几乎相同。
要在 Windows 系统上安装 Rcartogram,您首先需要安装所有先决条件,即:
- Rtools 程序套件(您需要能够将涉及 C 代码的任何 R 包安装到 Windows 机器上),以及
- FFTW 库(Rcartogram 代码使用)。
然后,当您第一次安装 Rcartogram 时,您需要告诉 R 在哪里可以找到 FFTW 库,并且几乎肯定需要让 R 知道在加载 Rcartogram 时在哪里可以找到 FFTW 库,例如通过 library(Rcartogram)
在 R 会话中。
我发现我还需要对 Rcartogram R 代码进行一些非常小的更改(主要是为了使其与编写后对 R 语法的更改保持一致)以便顺利安装,并且 运行 在 Windows.
上正确
所以完整的答案涉及几个步骤。
第 1 步:安装 Rtools 套件
我怀疑您需要安装 Rtools 才能克服状态 127 错误。有关如何执行此操作的官方说明,请参见此处 http://cran.r-project.org/doc/manuals/R-admin.html#The-Windows-toolset. There are user friendly explanations of how to install Rtools into a Windows system elsewhere on the web --- see for example https://github.com/stan-dev/rstan/wiki/Install-Rtools-for-Windows。 (官方说明还告诉你如何安装许多其他东西,如果你想从 Windows 上的源代码构建 R 本身,或者使用 LaTeX 生成包文档,你需要这些,但你不需要所有这些让 Rcartogram 工作的东西)。
稍微长一点的回答:
我现在可以复制您的 status 127 error
--- 通过从我的 PATH 中删除对 Rtools 所在目录的引用。当我这样做时,Windows cmd shell(您可能会在其中键入 R CMD INSTALL …
找不到 Rtools 可执行文件,这会导致 127 错误消息。同样尝试 运行 R 中的 install.packages()
也以同样的方式失败,因为在引擎盖下 install.packages
调用 Windows cmd shell.
为什么需要 Rtools? Well 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 位机器上你需要 both 版本。 (顺便说一句,可能有一种方法可以让你只用一个方法,通过在安装 Rcartogram 时设置标志,但我自己还没有测试过这条路线)。将 32 位版本解压到子目录 /i386
,将 64 位版本解压到子目录 /x64
。在我的例子中(见下文),我将它们作为 "C:/msys/fftwtest" 的子目录。 (除了这些子目录之外,还有 R 使用的约定 - 理论上您可以将它们放在其他地方,但为什么会变得更加复杂!)。
一个困扰我很长一段时间的陷阱是这些库是动态库(即 .dll s),所以 - 后来 - 我需要确保在我的电脑上安装它们时我把它们放在我的 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的文件的目录,linker在编译步骤结束时将所有内容放在一起时需要。 something 可能是“.dll”(在这种情况下,子目录可能是 \bin 而不是 \lib),也可能是“.a”或“.la”(这就是R 会在使用静态 FFTW 库时进行查找,这些库是我在学习了如何从源代码编译 FFTW 后创建的)。
2 个目录是必需的,因为 R 默认情况下会尝试在 Windows 机器上安装 32 位和 64 位版本的 Rcartogram。如果您以 .dll 格式提供 FFTW 库文件,那么这些库必须与您的 PATH 中完全相同(因为当您尝试执行 library(Rcartogram) R 需要在加载已安装的文件时再次找到 FFTW dll 库Rcartogram 包)(顺便说一句,这就是为什么最后我编译了自己的静态 FFTW 库,所以我不必在 Windows 环境中弄乱我的 PATH 变量)。
如果您使用从上面 link 下载的二进制文件,fftw3.h 和 libfftw3.dll 文件 是 都在同一个文件中(子)目录,and 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
(还要注意必须在每个-
前面有一个space(减号)在 -L
和 -l
标志的开头。
Makevars.win 文件在做什么?它告诉 R 安装过程 flags 它在尝试预处理、编译和 link Rcartogram 的 src 子目录中的 C 代码时需要。 PKG_CPPFLAGS
的值是 C 预处理器的一组标志,PKG_LIBS
的值是 link 步骤的一组标志。
-
-I
是一个表示 'try looking in the following directory when the C pre-processor is looking for include files' 的标志,因此在上面的示例中它表示要查看 "main libfftw directory\x64"
。它寻找的包含文件是 fftw3.h
(该文件名埋在 Rcartogram 的 C 代码中)
-L
标志表示 'try looking in the following directory when the linker is looking for files from any library that you expect to use',因此 -L"main libfftw directory\x64"
表示尝试在 "main libfftw directory\x64"
目录中查找。您可以(并且需要)在该搜索路径上有超过 1 个目录 - linker 一直在寻找直到找到它正在寻找的东西(或者 运行s 不在寻找的地方并给出一条错误消息)和
-l
标志给出了 link 用户应该查找的库文件的名称,但不是逐字逐句地给出了名称——相反,该名称是根据您在 a 之后输入的内容构建的(稍微对我来说很疯狂)来自 unix 世界的约定。因为库的文件名 总是 以“lib”开头,所以约定的第一部分是将 "lib" 放在标志中的名称之外。库的文件名可以有几个不同的扩展名(例如“.dll”或“.a”),因此约定的第二部分是您将文件扩展名从 -l
标志值中保留为好吧,让 linker 找出它想要的东西。所以 –lfftw3
说寻找一个名为 libfftw3.dll
或一个名为 libfftw3.a
的文件(可能还有其他可能的扩展名,我不确定)。
下载的dll实际上叫libfftw3-3.dll
,(不像我自己编译的叫libfftw3.a
)所以需要把–l
标志改成[=51] =]
NB 如果您正在使用下载的 FFTW 库,该库使用 .dll
s 确保您已将它们放在您的 PATH 中(请参阅第 2 步的最后一段)还有。
第 4 步:对 Rcartogram C 代码的小修正
我发现我必须对 Rcartogram 代码本身进行另外两个小改动 运行ning。
首先在文件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")
同样,再往下 cart.R 改变的 .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 的演示给出了错误的结果(即使它 运行 OK)。
第 5 步:实际安装 Rcartogram
您现在应该可以安装 Rcartogram 了。
通过打开 cmd window,将目录(cd
更改为)解压缩和修改后的 Rcartogram 包源代码所在的位置,然后键入 R CMD INSTALL --preclean .
或
通过启动 R 会话,将工作目录设置为 Rcartogram 源所在的位置并键入 install.packages(".", repos = NULL, type = 'source', INSTALL_opts = "--preclean")
.
有效是因为您已经cd
ed 到 Rcartogram 源代码所在的目录。 --preclean
标志告诉 R 在它开始之前清理早期(失败)尝试在 Rcartogram 中编译 C 代码的任何剩余中间文件。如果你走到这一步但仍然遇到问题,也可以添加一个 --debug
标志。它提供了有关安装失败原因的更多详细信息。
第 6 步:享受变形贴图
我自己才刚刚开始实际使用 Rcartogram(我花了一段时间才做到这一点!),但您可能想查看 getcartr --- R package。该包使用 Rcartogram,看起来非常简洁! 和 github 网站上给出的安装说明对我来说是第一次工作(我已经安装了 devtools 并且可以正常工作)。
希望这对您有所帮助(并祝贺所有读到这里的人)
2017 年 5 月更新
我已经好几年没有研究这个了(所以没有 gua运行tees 它仍然可以工作),但是在我写完上面的 post 之后,我创建了一个 forked https://github.com/Geoff99/Rcartogram/tree/WindowsInstall 处的 RCartogram 副本。
请参阅 Windows安装 b运行ch,其中包括
- 一个被大量评论的
src/Makevars.win
意味着可以更容易地在 Windows 和 上安装 RCartogram
- 比
vignettes/README.WindowsInstall.Tutorial.Rmd
中的 post 更全面的教程。见下文linkhttps://github.com/Geoff99/Rcartogram/blob/WindowsInstall/vignettes/README.WindowsInstall.Tutorial.Rmd
(要使用本教程,您需要使用 fork 存储库的 WindowsInstall b运行ch!)
我正在尝试构建像 here
这样的制图从 link 安装不工作:
`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)
压缩文件中都没有:
install.packages("C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz", repos = NULL, type = "source")
Installing package into ‘C:/Users/Milena/Documents/R/win-library/3.2’ (as
lib
is unspecified) * installing source packageRcartogram
...**********************************************<br> WARNING: this package has a configure script It probably needs manual configuration **********************************************
** libs
*** arch - i386 Warning: running command '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"' had status 127 ERROR: compilation failed for package 'Rcartogram' * removing 'C:/Users/Milena/Documents/R/win-library/3.2/Rcartogram' Warning in 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.2" "C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz"' had status 1 Warning in install.packages : installation of package ‘C:/Users/Milena/Downloads/Rcartogram_0.2-2.tar.gz’ had non-zero exit status
我该如何解决这个问题?
我正在 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,您需要从网站 http://www.omegahat.org/Rcartogram/ 下载软件包并从源代码安装。打开您的终端(在 Windows 中,它称为命令提示符),将目录更改为下载文件所在的位置并键入:R CMD INSTALL Rcartogram_0.2-2.tar.gz
该命令是从源安装 R 包。为此,您需要一个可用的 C 编译器。从您的错误消息来看,您似乎在使用我们的 C 编译器时遇到了一些问题。确保它是否有效(或者你有一个)。看看这个问题:C compiler for Windows?
正在 Windows
安装 RcartogramRcartogram 是一个 R 包(由 Duncan Temple Lang 开发),其主要目的是为一些 C 代码(由 Mark Newman 编写)提供一个 R 包装器,它实际上完成了构建制图(又名变形地图)的工作). Mark Newman写的C代码利用了FFTW(西方最快的Fourier T运行sform)编译库
Truc Viet Le 提出的问题中的 link 描述了如何在 Unix 系统上安装 Rcartogram。将 Rcartogram 引入 Windows 系统还涉及一些额外的技巧和陷阱,尽管其核心过程几乎相同。
要在 Windows 系统上安装 Rcartogram,您首先需要安装所有先决条件,即:
- Rtools 程序套件(您需要能够将涉及 C 代码的任何 R 包安装到 Windows 机器上),以及
- FFTW 库(Rcartogram 代码使用)。
然后,当您第一次安装 Rcartogram 时,您需要告诉 R 在哪里可以找到 FFTW 库,并且几乎肯定需要让 R 知道在加载 Rcartogram 时在哪里可以找到 FFTW 库,例如通过 library(Rcartogram)
在 R 会话中。
我发现我还需要对 Rcartogram R 代码进行一些非常小的更改(主要是为了使其与编写后对 R 语法的更改保持一致)以便顺利安装,并且 运行 在 Windows.
上正确所以完整的答案涉及几个步骤。
第 1 步:安装 Rtools 套件
我怀疑您需要安装 Rtools 才能克服状态 127 错误。有关如何执行此操作的官方说明,请参见此处 http://cran.r-project.org/doc/manuals/R-admin.html#The-Windows-toolset. There are user friendly explanations of how to install Rtools into a Windows system elsewhere on the web --- see for example https://github.com/stan-dev/rstan/wiki/Install-Rtools-for-Windows。 (官方说明还告诉你如何安装许多其他东西,如果你想从 Windows 上的源代码构建 R 本身,或者使用 LaTeX 生成包文档,你需要这些,但你不需要所有这些让 Rcartogram 工作的东西)。
稍微长一点的回答:
我现在可以复制您的 status 127 error
--- 通过从我的 PATH 中删除对 Rtools 所在目录的引用。当我这样做时,Windows cmd shell(您可能会在其中键入 R CMD INSTALL …
找不到 Rtools 可执行文件,这会导致 127 错误消息。同样尝试 运行 R 中的 install.packages()
也以同样的方式失败,因为在引擎盖下 install.packages
调用 Windows cmd shell.
为什么需要 Rtools? Well 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 位机器上你需要 both 版本。 (顺便说一句,可能有一种方法可以让你只用一个方法,通过在安装 Rcartogram 时设置标志,但我自己还没有测试过这条路线)。将 32 位版本解压到子目录 /i386
,将 64 位版本解压到子目录 /x64
。在我的例子中(见下文),我将它们作为 "C:/msys/fftwtest" 的子目录。 (除了这些子目录之外,还有 R 使用的约定 - 理论上您可以将它们放在其他地方,但为什么会变得更加复杂!)。
一个困扰我很长一段时间的陷阱是这些库是动态库(即 .dll s),所以 - 后来 - 我需要确保在我的电脑上安装它们时我把它们放在我的 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的文件的目录,linker在编译步骤结束时将所有内容放在一起时需要。 something 可能是“.dll”(在这种情况下,子目录可能是 \bin 而不是 \lib),也可能是“.a”或“.la”(这就是R 会在使用静态 FFTW 库时进行查找,这些库是我在学习了如何从源代码编译 FFTW 后创建的)。
2 个目录是必需的,因为 R 默认情况下会尝试在 Windows 机器上安装 32 位和 64 位版本的 Rcartogram。如果您以 .dll 格式提供 FFTW 库文件,那么这些库必须与您的 PATH 中完全相同(因为当您尝试执行 library(Rcartogram) R 需要在加载已安装的文件时再次找到 FFTW dll 库Rcartogram 包)(顺便说一句,这就是为什么最后我编译了自己的静态 FFTW 库,所以我不必在 Windows 环境中弄乱我的 PATH 变量)。
如果您使用从上面 link 下载的二进制文件,fftw3.h 和 libfftw3.dll 文件 是 都在同一个文件中(子)目录,and 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
(还要注意必须在每个-
前面有一个space(减号)在-L
和-l
标志的开头。
Makevars.win 文件在做什么?它告诉 R 安装过程 flags 它在尝试预处理、编译和 link Rcartogram 的 src 子目录中的 C 代码时需要。 PKG_CPPFLAGS
的值是 C 预处理器的一组标志,PKG_LIBS
的值是 link 步骤的一组标志。
-
-I
是一个表示 'try looking in the following directory when the C pre-processor is looking for include files' 的标志,因此在上面的示例中它表示要查看"main libfftw directory\x64"
。它寻找的包含文件是fftw3.h
(该文件名埋在 Rcartogram 的 C 代码中) -L
标志表示 'try looking in the following directory when the linker is looking for files from any library that you expect to use',因此-L"main libfftw directory\x64"
表示尝试在"main libfftw directory\x64"
目录中查找。您可以(并且需要)在该搜索路径上有超过 1 个目录 - linker 一直在寻找直到找到它正在寻找的东西(或者 运行s 不在寻找的地方并给出一条错误消息)和-l
标志给出了 link 用户应该查找的库文件的名称,但不是逐字逐句地给出了名称——相反,该名称是根据您在 a 之后输入的内容构建的(稍微对我来说很疯狂)来自 unix 世界的约定。因为库的文件名 总是 以“lib”开头,所以约定的第一部分是将 "lib" 放在标志中的名称之外。库的文件名可以有几个不同的扩展名(例如“.dll”或“.a”),因此约定的第二部分是您将文件扩展名从-l
标志值中保留为好吧,让 linker 找出它想要的东西。所以–lfftw3
说寻找一个名为libfftw3.dll
或一个名为libfftw3.a
的文件(可能还有其他可能的扩展名,我不确定)。
下载的dll实际上叫libfftw3-3.dll
,(不像我自己编译的叫libfftw3.a
)所以需要把–l
标志改成[=51] =]
NB 如果您正在使用下载的 FFTW 库,该库使用 .dll
s 确保您已将它们放在您的 PATH 中(请参阅第 2 步的最后一段)还有。
第 4 步:对 Rcartogram C 代码的小修正
我发现我必须对 Rcartogram 代码本身进行另外两个小改动 运行ning。
首先在文件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")
同样,再往下 cart.R 改变的 .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 的演示给出了错误的结果(即使它 运行 OK)。
第 5 步:实际安装 Rcartogram
您现在应该可以安装 Rcartogram 了。
通过打开 cmd window,将目录(
cd
更改为)解压缩和修改后的 Rcartogram 包源代码所在的位置,然后键入R CMD INSTALL --preclean .
或通过启动 R 会话,将工作目录设置为 Rcartogram 源所在的位置并键入
install.packages(".", repos = NULL, type = 'source', INSTALL_opts = "--preclean")
.
有效是因为您已经cd
ed 到 Rcartogram 源代码所在的目录。 --preclean
标志告诉 R 在它开始之前清理早期(失败)尝试在 Rcartogram 中编译 C 代码的任何剩余中间文件。如果你走到这一步但仍然遇到问题,也可以添加一个 --debug
标志。它提供了有关安装失败原因的更多详细信息。
第 6 步:享受变形贴图
我自己才刚刚开始实际使用 Rcartogram(我花了一段时间才做到这一点!),但您可能想查看 getcartr --- R package。该包使用 Rcartogram,看起来非常简洁! 和 github 网站上给出的安装说明对我来说是第一次工作(我已经安装了 devtools 并且可以正常工作)。
希望这对您有所帮助(并祝贺所有读到这里的人)
2017 年 5 月更新
我已经好几年没有研究这个了(所以没有 gua运行tees 它仍然可以工作),但是在我写完上面的 post 之后,我创建了一个 forked https://github.com/Geoff99/Rcartogram/tree/WindowsInstall 处的 RCartogram 副本。
请参阅 Windows安装 b运行ch,其中包括
- 一个被大量评论的
src/Makevars.win
意味着可以更容易地在 Windows 和 上安装 RCartogram
- 比
vignettes/README.WindowsInstall.Tutorial.Rmd
中的 post 更全面的教程。见下文linkhttps://github.com/Geoff99/Rcartogram/blob/WindowsInstall/vignettes/README.WindowsInstall.Tutorial.Rmd
(要使用本教程,您需要使用 fork 存储库的 WindowsInstall b运行ch!)