7

不久前,我创建了 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新手。

4

4 回答 4

5

这是一个快速修复:

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

于 2020-11-02T07:55:49.693 回答
2
  1. 安装 R-4.0.0
  2. 安装 Rtools35
  3. 编辑 $R_HOME/etc/x64/Makeconf(对于 R-4.0.0-x64)
  4. Rcmd 安装 RDCOMClient
于 2020-05-12T15:58:37.103 回答
1

我可以确认上述答案中描述的程序朝着正确的方向前进,但可能需要一些额外的步骤。我还可以确认下面的过程会生成一个 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 )

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

通过更改编辑 $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

从https://github.com/omegahat/RDCOMClient下载 RDCOMClient-master.zip (点击绿色的 Clone 按钮并选择下载 zip)

解压到名为 RDCOMClient 的目录

确保设置了以下 PATH 变量:

C:\Program Files\R\R-4.0.0\bin\x64 (assuming this is the location where R is installed)
C:\Rtools\bin
C:\Rtools\mingw_64\bin

添加具有以下值的环境变量 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")
于 2020-06-30T13:46:24.983 回答
1

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 )

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

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

C:\rtools

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

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

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

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

做同样的事情etc\i386\Makeconf

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

不要设置BINPREF为环境变量,否则这将覆盖 makefile 更改(就像这样RTOOLS40_HOME做)。完成这些后,完成与 Rik 概述的相同步骤:

打开 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")

于 2020-07-06T19:38:26.343 回答