Kyl*_*ard 7 c++ r rdcomclient rtools
不久前,我创建了 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
Run Code Online (Sandbox Code Playgroud)
同样,以上在 R 3.6 中有效。
有没有办法继续使用以前的 rtools 进行构建?我遇到了https://github.com/r-windows/rtools-backports#readme,它谈到使用 rtools35 继续构建包,所以我有希望,但我不明白如何实现。
或者,如果我可以对 R 或 cpp 代码进行细微的更改来解决我的问题,我会全力以赴。不过,我是 cpp 新手。
Rik 的回答非常有帮助,并且得到了一个可以运行的版本;然而,在花了一天时间之后,我能够改进它。我想把它放在这里,以防我必须再次这样做。主要改进是能够为 32 位和 64 位架构构建工作包。默认情况下,R 会安装两者,这使得安装依赖包时变得更加容易。
\n前两个步骤是相同的:
\n安装 R-4.0.0 ( https://cran.r-project.org/bin/windows/base/old/4.0.0/R-4.0.0-win.exe )
\n安装 Rtools35 ( https://cran.r-project.org/bin/windows/Rtools/Rtools35.exe在目录 c:\\Rtools 中
\n如果(像我一样)您已经安装了 rtools40,RTOOLS40_HOME则会创建一个名为的系统环境变量。第一步是将其更改为:
C:\\rtools
如果您没有安装 rtools40,则创建RTOOLS40_HOME系统环境变量。
make 文件中仍需要进行两处更改。这些可以在您的 R 安装目录中找到。
\n在etc\\x64\\Makeconf,通过设置以下值添加下划线以匹配 rtools35 目录结构:
MINGW_PREFIX = /mingw_$(WIN)\nBINPREF ?= "$(RTOOLS40_ROOT)/mingw_64/bin/"\nRun Code Online (Sandbox Code Playgroud)\n在中做同样的事情etc\\i386\\Makeconf:
MINGW_PREFIX = /mingw_$(WIN)\nBINPREF ?= "$(RTOOLS40_ROOT)/mingw_32/bin/"\nRun Code Online (Sandbox Code Playgroud)\n不要设置BINPREF为环境变量,否则这将覆盖 makefile 更改(例如RTOOLS40_HOME做)。完成这些后,按照 Rik 概述的相同步骤完成:
打开 Windows 命令提示符并更改到包含 RDCOMClient 子目录的目录并键入:
\nR CMD INSTALL RDCOMClient \xe2\x80\x93-build RDCOMClient.zip
这将在 R-4.0.0 的本地安装中安装 RDCOMClient,并另外创建文件 RDCOMClient_0.94-0.zip,该文件可以使用以下命令安装在其他系统上:
\ninstall.packages("RDCOMClient_0.94-0.zip", repos = NULL, type = "win.binary")