无法在 R Markdown 中使用 Rcpp 引擎
Can't use Rcpp engine in R Markdown
我尝试Knit HTML
以下 Rmd 文件:
---
title: "Untitled"
author: "Florian Privé"
date: "12 septembre 2016"
output: html_document
---
```{r fibCpp, engine='Rcpp'}
#include <Rcpp.h>
// [[Rcpp::export]]
int fibonacci(const int x) {
if (x == 0 || x == 1) return(x);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}
```
我收到以下错误:
Building shared library for Rcpp code chunk...
Warning message:
l'exécution de la commande 'make -f "C:/PROGRA~1/R/R-33~1.1/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-33~1.1/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="sourceCpp_2.dll" WIN=64 TCLBIN=64 OBJECTS="file110c1d4643e9.o"' renvoie un statut 127
Quitting from lines 11-18 (test.Rmd)
Error in (function (file = "", code = NULL, env = globalenv(), embeddedR = TRUE, :
Error 1 occurred building shared library.
Calls: <Anonymous> ... block_exec -> in_dir -> engine -> do.call -> <Anonymous>
Exécution arrêtée
我做错了什么吗?是否与 Windows 有关?
来自 sessionInfo()
的环境信息
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252
[3] LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=French_France.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] magrittr_1.5 rsconnect_0.4.3 htmltools_0.3.5 tools_3.3.1 yaml_2.1.13
[6] Rcpp_0.12.7 stringi_1.1.1 rmarkdown_1.0 stringr_1.1.0 digest_0.6.10
[11] evaluate_0.9
Rtools 安装检查通过 devtools::find_rtools()
[1] TRUE
结果来自 Sys.getenv()['PATH']
## PATH C:\Program
## Files\R\R-3.3.1\bin\x64;C:\ProgramData\Oracle\Java\javapath;C:\Program
## Files\NVIDIA GPU Computing
## Toolkit\CUDA\v7.5\bin;C:\Program
## Files\NVIDIA GPU Computing
## Toolkit\CUDA\v7.5\libnvvp;;C:\Program Files
## (x86)\Intel\iCLS Client\;C:\Program
## Files\Intel\iCLS
## Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program
## Files (x86)\Windows Live\Shared;C:\Program
## Files\Intel\Intel(R) Management Engine
## Components\DAL;C:\Program
## Files\Intel\Intel(R) Management Engine
## Components\IPT;C:\Program Files
## (x86)\Intel\Intel(R) Management Engine
## Components\DAL;C:\Program Files
## (x86)\Intel\Intel(R) Management Engine
## Components\IPT;C:\Program Files
## (x86)\Skype\Phone\;C:\Users\Florian\.dnx\bin;C:\Program
## Files\Microsoft DNX\Dnvm\;C:\Program Files
## (x86)\NVIDIA
## Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Users\Florian\Anaconda3;C:\Users\Florian\Anaconda3\Scripts;C:\Users\Florian\Anaconda3\Library\bin;C:\Program
## Files
## (x86)\Java\jre1.8.0_101\bin\client;C:\texlive15\bin\win32
解决方法可能是这样的:
---
title: "Untitled"
author: "Florian Privé"
date: "12 septembre 2016"
output: html_document
---
```{r}
Rcpp::cppFunction('
int fibonacci(const int x) {
if (x == 0 || x == 1) return(x);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}')
```
```{r}
fibonacci(10L)
```
# [1] 55
根据 Sys.getenv['PATH']
not containing a path with Rtools
in it and the knowledge that the knitr
error is being triggered by an invalid engine path, I think you are falling victim to devtools::find_rtools() 请求的信息在设置时抛出误报。
这是典型的情况,因为如果无法找到 Rtools on the system path, it scans for Rtools within the registry and then sets an environment flag. The environment flag does not typically persist while running rmarkdown or during the package build stage. Also see:
例如如果您关闭所有打开的会话 R 会话,然后打开一个 new R 会话并且仅键入 Rcpp::evalCpp("2 + 2")
您可能会触发编译错误.
解决这个问题很简单:添加 Rtools install location to the PATH
system variable. I maintain an installation guide that literally takes you step-by-step through this process here: http://thecoatlessprofessor.com/programming/rcpp/install-rtools-for-rcpp/
从 Rtools 3.4 开始,必须添加到 PATH
的两个位置是:
c:\Rtools\bin;
c:\Rtools\mingw_32\bin;
要修改 windows 上的 PATH
变量,请参阅:
我今天在 windows 10 遇到了这个错误,你包含的输出与我的输出一样好。
J_F 的解决方法或通过高级系统设置将 "c:\Rtools\bin" 添加到路径都没有解决它。
为我解决的是卸载 Rtools 并重新安装它,检查安装期间更改路径的选项。我把路径:"c:\Rtools\bin"、"C:\Rtools\mingw_32\bin"、"C:\Program Files\R\R-3.3.1\bin\i386" 和 "C:\Program Files\R\R-3.3.1\bin\x64" 放在那里。
我想知道为什么通过高级系统设置向路径添加 "c:\Rtools\bin" 没有改变 Sys.getenv()['PATH']
的输出
我也刚遇到这个问题。我看到自上次解决这个问题已经有几年了,所以我想更新我在 2020 年找到的解决方案。
我收到了顶部提到的确切错误,并且不得不重新安装 Rtools。我最初有 RBuildTools,它适用于我构建的其他包,但在为该项目编译 cpp 代码时仍然遇到问题。我安装了 Rtools40 并保留了所有默认设置。然后将我的 windows 10 机器上的系统路径变量更改为 C:\rtools40\usr\bin
。重启机器后,knitr 渲染了文档,没有任何进一步的错误。
Rtools40安装说明即可be found at this link
希望对您有所帮助!
当 运行 在 Windows 10 上的 Rmarkdown {Rcpp}
块时,我确实遇到了这个问题。Rcpp 在其他所有情况下都运行良好。
- 安装 Rtools40(如@aromatic6tet)所说,使其出现在
C:\rtools40
- 重启机器
- 打开 Rstudio
- 键入以下内容,注意在路径常量之间使用分号分隔符并使用双反斜杠。
Sys.setenv(PATH = paste(Sys.getenv("PATH"), "C:\rtools40\usr\bin", sep = ";"))
...knitr 现在可以编译 Rcpp!
我尝试Knit HTML
以下 Rmd 文件:
---
title: "Untitled"
author: "Florian Privé"
date: "12 septembre 2016"
output: html_document
---
```{r fibCpp, engine='Rcpp'}
#include <Rcpp.h>
// [[Rcpp::export]]
int fibonacci(const int x) {
if (x == 0 || x == 1) return(x);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}
```
我收到以下错误:
Building shared library for Rcpp code chunk...
Warning message:
l'exécution de la commande 'make -f "C:/PROGRA~1/R/R-33~1.1/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-33~1.1/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="sourceCpp_2.dll" WIN=64 TCLBIN=64 OBJECTS="file110c1d4643e9.o"' renvoie un statut 127
Quitting from lines 11-18 (test.Rmd)
Error in (function (file = "", code = NULL, env = globalenv(), embeddedR = TRUE, :
Error 1 occurred building shared library.
Calls: <Anonymous> ... block_exec -> in_dir -> engine -> do.call -> <Anonymous>
Exécution arrêtée
我做错了什么吗?是否与 Windows 有关?
来自 sessionInfo()
的环境信息
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252
[3] LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=French_France.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] magrittr_1.5 rsconnect_0.4.3 htmltools_0.3.5 tools_3.3.1 yaml_2.1.13
[6] Rcpp_0.12.7 stringi_1.1.1 rmarkdown_1.0 stringr_1.1.0 digest_0.6.10
[11] evaluate_0.9
Rtools 安装检查通过 devtools::find_rtools()
[1] TRUE
结果来自 Sys.getenv()['PATH']
## PATH C:\Program
## Files\R\R-3.3.1\bin\x64;C:\ProgramData\Oracle\Java\javapath;C:\Program
## Files\NVIDIA GPU Computing
## Toolkit\CUDA\v7.5\bin;C:\Program
## Files\NVIDIA GPU Computing
## Toolkit\CUDA\v7.5\libnvvp;;C:\Program Files
## (x86)\Intel\iCLS Client\;C:\Program
## Files\Intel\iCLS
## Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program
## Files (x86)\Windows Live\Shared;C:\Program
## Files\Intel\Intel(R) Management Engine
## Components\DAL;C:\Program
## Files\Intel\Intel(R) Management Engine
## Components\IPT;C:\Program Files
## (x86)\Intel\Intel(R) Management Engine
## Components\DAL;C:\Program Files
## (x86)\Intel\Intel(R) Management Engine
## Components\IPT;C:\Program Files
## (x86)\Skype\Phone\;C:\Users\Florian\.dnx\bin;C:\Program
## Files\Microsoft DNX\Dnvm\;C:\Program Files
## (x86)\NVIDIA
## Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Users\Florian\Anaconda3;C:\Users\Florian\Anaconda3\Scripts;C:\Users\Florian\Anaconda3\Library\bin;C:\Program
## Files
## (x86)\Java\jre1.8.0_101\bin\client;C:\texlive15\bin\win32
解决方法可能是这样的:
---
title: "Untitled"
author: "Florian Privé"
date: "12 septembre 2016"
output: html_document
---
```{r}
Rcpp::cppFunction('
int fibonacci(const int x) {
if (x == 0 || x == 1) return(x);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}')
```
```{r}
fibonacci(10L)
```
# [1] 55
根据 Sys.getenv['PATH']
not containing a path with Rtools
in it and the knowledge that the knitr
error is being triggered by an invalid engine path, I think you are falling victim to devtools::find_rtools() 请求的信息在设置时抛出误报。
这是典型的情况,因为如果无法找到 Rtools on the system path, it scans for Rtools within the registry and then sets an environment flag. The environment flag does not typically persist while running rmarkdown or during the package build stage. Also see:
例如如果您关闭所有打开的会话 R 会话,然后打开一个 new R 会话并且仅键入 Rcpp::evalCpp("2 + 2")
您可能会触发编译错误.
解决这个问题很简单:添加 Rtools install location to the PATH
system variable. I maintain an installation guide that literally takes you step-by-step through this process here: http://thecoatlessprofessor.com/programming/rcpp/install-rtools-for-rcpp/
从 Rtools 3.4 开始,必须添加到 PATH
的两个位置是:
c:\Rtools\bin;
c:\Rtools\mingw_32\bin;
要修改 windows 上的 PATH
变量,请参阅:
我今天在 windows 10 遇到了这个错误,你包含的输出与我的输出一样好。
J_F 的解决方法或通过高级系统设置将 "c:\Rtools\bin" 添加到路径都没有解决它。
为我解决的是卸载 Rtools 并重新安装它,检查安装期间更改路径的选项。我把路径:"c:\Rtools\bin"、"C:\Rtools\mingw_32\bin"、"C:\Program Files\R\R-3.3.1\bin\i386" 和 "C:\Program Files\R\R-3.3.1\bin\x64" 放在那里。
我想知道为什么通过高级系统设置向路径添加 "c:\Rtools\bin" 没有改变 Sys.getenv()['PATH']
我也刚遇到这个问题。我看到自上次解决这个问题已经有几年了,所以我想更新我在 2020 年找到的解决方案。
我收到了顶部提到的确切错误,并且不得不重新安装 Rtools。我最初有 RBuildTools,它适用于我构建的其他包,但在为该项目编译 cpp 代码时仍然遇到问题。我安装了 Rtools40 并保留了所有默认设置。然后将我的 windows 10 机器上的系统路径变量更改为 C:\rtools40\usr\bin
。重启机器后,knitr 渲染了文档,没有任何进一步的错误。
Rtools40安装说明即可be found at this link
希望对您有所帮助!
当 运行 在 Windows 10 上的 Rmarkdown {Rcpp}
块时,我确实遇到了这个问题。Rcpp 在其他所有情况下都运行良好。
- 安装 Rtools40(如@aromatic6tet)所说,使其出现在
C:\rtools40
- 重启机器
- 打开 Rstudio
- 键入以下内容,注意在路径常量之间使用分号分隔符并使用双反斜杠。
Sys.setenv(PATH = paste(Sys.getenv("PATH"), "C:\rtools40\usr\bin", sep = ";"))
...knitr 现在可以编译 Rcpp!