编译共享库时出现Knitr和Rcpp错误1

时间:2017-07-02 19:49:34

标签: r rstudio knitr rcpp

我目前正在使用Windows计算机,并且遇到与knitr和Rcpp交互的问题。

当我在Rstudio上运行它时,我的代码工作正常,但当我尝试使用knitr创建html文件时,我收到错误:enter image description here

当我删除该行时,创建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上运行这些行就可以工作,但是当我按下编织按钮时会给我同样的错误。

1 个答案:

答案 0 :(得分:0)

嗯,看了here之后,我发现它可能与Rtools有关。似乎在knitr中运行的R会话不太灵活,以及找到Rtools&#34;,所以它不会起作用。我不确定这是否有意义。

如果其他人遇到此问题,我发现一个简单的解决方法是在调用cppFunction之前将下面的行添加到Rmd文件中(确保位置RBuildTools在PATH上)。在尝试编译之前,它会找到Rtools。

library(devtools)
find_rtools()

如果其他人对所发生的事情以及如何解决问题有更多的技术性解释,那么我就不必将这些行添加到每个文件中,我很感激。