我目前正在使用Windows计算机,并且遇到与knitr和Rcpp交互的问题。
当我在Rstudio上运行它时,我的代码工作正常,但当我尝试使用knitr创建html文件时,我收到错误:
当我删除该行时,创建html文件是有效的,所以看起来它在Rcpp或knitr包中都不是问题。
另一方面,我从未在代码中使用sourceCPP函数,而是使用cppFunction(C代码作为字符串的变量)。
根据需要,我创建了一个简化的例子,脚本" cppcode.R"下面:
library(Rcpp)
library(RcppArmadillo)
ccode = "
NumericMatrix rand_mat(NumericVector dim){
IntegerVector v = seq_len(2) - 1;
int N = dim[0];
int M = dim[1];
NumericMatrix Y(N,M);
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
Y(i,j) = sample(v,1,true)[0];
}
}
return Y;
}
"
cppFunction(code=ccode,depends="RcppArmadillo")
然后是Rmd文件:
#This is an example
```{r}
source("cppcode.R")
rand_mat(c(3,3))
```
如果只是在Rstudio上运行这些行就可以工作,但是当我按下编织按钮时会给我同样的错误。
答案 0 :(得分:0)
嗯,看了here之后,我发现它可能与Rtools有关。似乎在knitr中运行的R会话不太灵活,以及找到Rtools&#34;,所以它不会起作用。我不确定这是否有意义。
如果其他人遇到此问题,我发现一个简单的解决方法是在调用cppFunction之前将下面的行添加到Rmd文件中(确保位置RBuildTools在PATH上)。在尝试编译之前,它会找到Rtools。
library(devtools)
find_rtools()
如果其他人对所发生的事情以及如何解决问题有更多的技术性解释,那么我就不必将这些行添加到每个文件中,我很感激。