为什么在 has_devel() = TRUE 之前需要 运行 find_rtools()?

Why do I need to run find_rtools() before has_devel() = TRUE?

我尝试按照 http://adv-r.had.co.nz/Rcpp.html 中的指南来理解 Rcpp 但我总是需要 运行 devtools::find_rtools() 在任何 Rcpp 函数工作之前: 如果我这样做

library(devtools)
library(Rcpp)

has_devel() # Error: Command failed(1)

# Example from http://adv-r.had.co.nz/Rcpp.html
add <- cppFunction('int add(int x, int y, int z) {
  int sum = x + y + z;
  return sum;
}') 

我收到一个错误,Rstudio 提示我安装额外的构建工具(但当我说是时没有任何反应)。看起来有些 make 命令失败了,但是 system("where make") 给出了我的 PATH 中的路径。 当我然后做

find_rtools() # True

has_devel() # True

# Try the example again
add <- cppFunction('int add(int x, int y, int z) {
   int sum = x + y + z;
   return sum;
}')
# Now works
add(1,2,3) # 6

devtools 和 Rcpp 似乎都很开心。为什么会这样,我该如何解决?

这是我的路径的开始

path <- get_path()
head(path, 8)

[1] "F:\Software\R-3.3.0\bin\x64"
"F:\Software\Rtools\bin"                    
[3] "F:\Software\Rtools\gcc-4.6.3\bin"
"F:\Software\Python 3\Scripts\"            
[5] "F:\Software\Python 3\"
"F:\Software\Rtools\bin"                    
[7] "F:\Software\Rtools\gcc-4.6.3\bin"
"C:\Program Files (x86)\Intel\iCLS Client\"

基本上,您没有将 rtools 安装位置放在系统 PATH 变量上。所以,devtools::find_rtools()scanning the registry and adding it。添加仅对活动会话有效。

现在,devtools::has_devel()very simple build and link of a C++ file。因此,运行 devtools::has_devel() 没有必要的环境(例如有效的 rtools 安装)将导致失败。在这种情况下,环境设置不正确,因为系统 PATH 变量尚未修改。

确保系统路径变量中包含以下内容:

C:\Rtools\binC:\Rtools\gcc-4.6.3\bin

在干净的 R 会话中检查:

Sys.getenv("PATH")