【问题标题】:Knitr and Rcpp error 1 ocurred while building shared library [duplicate]构建共享库时发生 Knitr 和 Rcpp 错误 1 ​​[重复]
【发布时间】:2017-07-02 19:49:33
【问题描述】:

我目前正在使用 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 上运行这些行,但当我按下 knit 按钮时给我同样的错误。

【问题讨论】:

  • cppFunction 在其中调用 sourceCpp 函数。如果您向我们提供一些代码可能会更有帮助。
  • 用一个简化的例子编辑了问题。
  • 不知道该说什么。我用 (r)markdown 和实际的 rcpp 代码编写投影仪幻灯片一直
  • @VictorFreg 我无法重现该错误。 R文件和Rmd文件在同一个目录吗?
  • 是的,他们是。事实上,我测试过的另外两台(linux)计算机一切正常。

标签: r rstudio knitr rcpp


【解决方案1】:

好吧,在查看here 之后,我发现它可能与 Rtools 相关。似乎在 knitr 中运行的 R 会话对于“查找 Rtools”的灵活性较低,因此它不起作用。我不确定这是否有意义。

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

library(devtools)
find_rtools()

如果其他人对正在发生的事情以及如何修复它有更技术性的解释,以便我不必将这些行添加到每个文件中,我将不胜感激。

【讨论】:

  • 你读过你链接的帖子吗?我在其中提供了您想要的技术解释。 (请参阅第一段和第二段以及必要的永久修复。)简而言之,Rtools 安装没有正确完成。请按照以下说明操作:thecoatlessprofessor.com/programming/rcpp/…
  • 对不起,我一开始没有仔细阅读,但我认为它澄清了问题所在。刚开始将变量添加到 Path 并没有修复它,但我已经删除了 RBuildTools 文件夹(我假设这是卸载 Rtools),删除了 Rtools 的 Path 条目并按照您的指南重新安装,现在已经修复。谢谢。
猜你喜欢
  • 2013-07-11
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2014-04-02
  • 2016-09-04
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
相关资源
最近更新 更多