无法使用 rtools40 和 R 4.0 构建 RDCOMClient



前一段时间,我创建了RDCOMClient包的一个分叉,以使其能够与R 3.6一起工作(https://github.com/dkyleward/RDCOMClient)。人们现在又遇到了问题,因为它不适用于R 4.0。这个问题似乎不容易解决,我希望得到一些帮助。

如果我将Rstudio切换回R 3.6(和rtools35),我可以在安装devtools::install_github()后使用该包。当我尝试使用R 4.0(和rtools40)时,包会构建,我可以通过COM连接到应用程序。下面的第一行代码有效,xl是COM指针;然而,试图用它做任何事情(比如将Excel设置为可见)都会导致R.崩溃

xl <-  RDCOMClient::COMCreate("Excel.Application")
xl[["Visible"]] <- TRUE

同样,以上内容适用于R 3.6。

有没有办法继续使用以前的rtools进行构建?我偶然发现https://github.com/r-windows/rtools-backports#readme,谈到了使用rtools35来不断构建包,所以我有希望,但我不知道如何实现。

或者,如果我可以对R或cpp代码进行一些小的更改来解决我的问题,我会洗耳恭听。不过,我是cpp的新手。

这是一个快速修复:

install.packages("RDCOMClient",repos=";http://www.omegahat.net/R")

  1. 安装R-4.0.0
  2. 安装R工具35
  3. 编辑$R_HOME/etc/x64/Makeconf(适用于R-4.0.0-x64)
  4. Rcmd安装RDCOM客户端

Rik的回答非常有帮助,并使版本正常工作;然而,在花了一天的时间之后,我能够改进它。我想把它放在这里,以防我不得不再做一次。主要的改进是能够为32位和64位体系结构构建一个工作包。默认情况下,R同时安装这两个软件包,这样在安装依赖软件包时就更容易了。

前两个步骤相同:

安装R-4.0.0(https://cran.r-project.org/bin/windows/base/old/4.0.0/R-4.0.0-win.exe)

安装R工具35(https://cran.r-project.org/bin/windows/Rtools/Rtools35.exe)在目录c:\Rtools 中

如果(像我一样)您已经安装了rtools40,则会创建一个名为RTOOLS40_HOME的系统环境变量。第一步是将其更改为:

C:rtools

如果没有安装rtools40,则创建RTOOLS40_HOME系统环境变量。

make文件中仍然需要两个更改。这些可以在您的R安装目录中找到。

etcx64Makeconf中,通过设置以下值添加下划线以匹配rtools35目录结构:

MINGW_PREFIX = /mingw_$(WIN)
BINPREF ?= "$(RTOOLS40_ROOT)/mingw_64/bin/"

etci386Makeconf:中执行相同操作

MINGW_PREFIX = /mingw_$(WIN)
BINPREF ?= "$(RTOOLS40_ROOT)/mingw_32/bin/"

不要BINPREF设置为环境变量,否则会覆盖makefile更改(就像RTOOLS40_HOME一样)。完成这些后,以里克概述的相同步骤结束:

打开windows命令提示符并更改为包含RDCOMClient子目录的目录,然后键入:

R CMD INSTALL RDCOMClient –-build RDCOMClient.zip

这将在R-4.0.0的本地安装中安装RDCOMClient,并另外创建文件RDCOMClient_0.94-0.zip,该文件可以使用以下命令安装在其他系统上:

install.packages("RDCOMClient_0.94-0.zip", repos = NULL, type = "win.binary")

我可以确认上面答案中描述的过程朝着正确的方向发展,但可能需要一些额外的步骤。我还可以确认,下面的过程产生了一个可以安装的Windows二进制文件,并将在R-4.0.0:下运行

安装R-4.0.0(https://cran.r-project.org/bin/windows/base/old/4.0.0/R-4.0.0-win.exe)

安装R工具35(https://cran.r-project.org/bin/windows/Rtools/Rtools35.exe)在目录c:\Rtools 中

通过更改编辑$R_HOME/etc/x64/Makeconf(适用于R-4.0.0-x64)

##  The rtools40 installer sets RTOOLS40_HOME, default to standard install path
RTOOLS40_HOME ?= c:/rtools40

##  The rtools40 installer sets RTOOLS40_HOME, default to standard install path
RTOOLS40_HOME ?= c:/rtools

从下载RDCOMClient-master.ziphttps://github.com/omegahat/RDCOMClient(单击绿色的克隆按钮并选择下载zip)

解压缩到名为RDCOMClient 的目录

确保设置了以下PATH变量:

C:Program FilesRR-4.0.0binx64 (assuming this is the location where R is installed)
C:Rtoolsbin
C:Rtoolsmingw_64bin

添加具有以下值的环境变量BINPREF(最后一个斜线很重要):

C:/Rtools/mingw_64/bin/

打开windows命令提示符并更改为包含RDCOMClient子目录的目录,然后键入:

R CMD INSTALL RDCOMClient –-build RDCOMClient.zip

这将在R-4.0.0的本地安装中安装RDCOMClient,并另外创建文件RDCOMClient_0.94-0.zip,该文件可以使用以下命令安装在其他系统上:

install.packages("RDCOMClient_0.94-0.zip", repos = NULL, type = "win.binary")

我使用的是R 4.1.2,我发现RDCOMClient会使R会话崩溃,而上述解决方案不起作用。

然后,我进一步与源所有者核实,找到了解决方案。

https://github.com/omegahat/RDCOMClient/issues/36

Duncantl给出了解决方案,并且它有效。

dir.create("MyTemp")
remotes::install_github("BSchamberger/RDCOMClient", ref = "main", lib = "MyTemp")

如果成功,我们可以用加载新安装的软件包

library("RDCOMClient", lib.loc = "MyTemp")

最新更新