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

时间:2016-05-14 12:27:52

标签: r rcpp devtools

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

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

的开头
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\\"

1 个答案:

答案 0 :(得分:2)

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

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

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

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

在干净的R会话中检查:

Sys.getenv("PATH")