NAMESPACE 中缺少 import(Rcpp) 导致在 R CMD 检查测试期间出现 C++ 库错误
Missing import(Rcpp) in NAMESPACE leads to C++ library error during R CMD check of tests
总结
我正在开发一个使用 Rcpp 的 R 包。我接手了这个有很多问题的项目,我正在努力解决它们。这个问题是我不知道如何在这种情况下创建一个最小的复制示例,因为包很大而且我没有参与早期设置。我将不胜感激关于如何去做的建议,我是在 R/Rcpp.
中编写包的新手
我让它在 Github 操作中通过了 macOS 和 Linux 上的自动 R CMD 检查。
有一个名为“R/simulate.R”的弃用文件,其中包含一个不再使用的函数。我正在尝试删除此文件。
相关行是:
...
#' @useDynLib myPackage
#' @export
#' @import CompQuadForm
#' @import doParallel
#' @import Rcpp
#' @import RcppArmadillo
#' @import Matrix
#' @import mvtnorm
#' @import PHENIX
simulate <- function(...) {...}
我使用 devtools::document()
更新了包中自动生成的文件。
有了这个,行
import(Matrix)
import(PHENIX)
import(Rcpp)
import(RcppArmadillo)
import(doParallel)
import(mvtnorm)
已从文件中删除 NAMESPACE
。
删除后,当我在 macOS-latest
上 运行 R CMD check .
时,出现以下错误:
* checking tests ... ERROR
Running ‘testthat.R’
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
> library(testthat)
> library(myPackage)
>
> test_check("myPackage")
libc++abi: __cxa_guard_acquire detected recursive initialization
运行 R CMD check .
on ubuntu-20.4
检查测试时出现以下错误:
Error: <rlib_error_2_0 in process_get_error_connection(self, private):
stderr is not a pipe.>
删除步骤
git rm R/simulate.R
- in R
devtools::document()
导致以下变化:
modified: NAMESPACE
deleted: R/simulate.R
deleted: man/simulate.Rd
R CMD check .
产生上述错误。
我试过的
我发现 this issue 有类似的问题,因此尝试使用 install.packages(c('Rcpp', 'RcppArmadillo', 'httpuv'))
重新安装软件包
问题仍然存在。
我尝试 git grep -nrw "simulate"
搜索文件中定义的函数以查找被遗忘的文件用法,但没有显示任何内容。
进度更新
而不是 运行ning devtools::document()
,我只从文件 NAMESPACE
中手动删除了行 export(simulate)
。有了这个,行
import(Matrix)
import(PHENIX)
import(Rcpp)
import(RcppArmadillo)
import(doParallel)
import(mvtnorm)
保留在文件 NAMESPACE
.
中
这些行是根据我通过删除 R/simulate.R
:
删除的函数的注释自动生成的
...
#' @useDynLib myPackage
#' @export
#' @import CompQuadForm
#' @import doParallel
#' @import Rcpp
#' @import RcppArmadillo
#' @import Matrix
#' @import mvtnorm
#' @import PHENIX
simulate <- function(...) {...}
现在,R CMD check .
运行正确了。
我想这意味着我还不理解注释和 NAMESPACE
并且在 NAMESPACE
.
中还有另一个依赖项需要这些导入
如果我提出问题的方式有问题,我也很乐意得到反馈。我也是新手发帖提问
谢谢!
已弃用的文件是唯一具有注释 #' @import Rcpp
的文件,该注释确保 devtools::document()
会在 NAMESPACE
文件中包含 import(Rcpp)
。
我通过注释使用 Rcpp 函数的包的主要 R 函数解决了这个问题 #' @import Rcpp
。
之后,devtools::document()
清理了自动生成的文件并保持包完好无损。
如果有人更了解 R 包开发,我将不胜感激,可以解释哪里出了问题,也许 link 解释注释和 NAMESPACE
文件的最佳资源!谢谢
总结
我正在开发一个使用 Rcpp 的 R 包。我接手了这个有很多问题的项目,我正在努力解决它们。这个问题是我不知道如何在这种情况下创建一个最小的复制示例,因为包很大而且我没有参与早期设置。我将不胜感激关于如何去做的建议,我是在 R/Rcpp.
中编写包的新手我让它在 Github 操作中通过了 macOS 和 Linux 上的自动 R CMD 检查。
有一个名为“R/simulate.R”的弃用文件,其中包含一个不再使用的函数。我正在尝试删除此文件。
相关行是:
...
#' @useDynLib myPackage
#' @export
#' @import CompQuadForm
#' @import doParallel
#' @import Rcpp
#' @import RcppArmadillo
#' @import Matrix
#' @import mvtnorm
#' @import PHENIX
simulate <- function(...) {...}
我使用 devtools::document()
更新了包中自动生成的文件。
有了这个,行
import(Matrix)
import(PHENIX)
import(Rcpp)
import(RcppArmadillo)
import(doParallel)
import(mvtnorm)
已从文件中删除 NAMESPACE
。
删除后,当我在 macOS-latest
上 运行 R CMD check .
时,出现以下错误:
* checking tests ... ERROR
Running ‘testthat.R’
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
> library(testthat)
> library(myPackage)
>
> test_check("myPackage")
libc++abi: __cxa_guard_acquire detected recursive initialization
运行 R CMD check .
on ubuntu-20.4
检查测试时出现以下错误:
Error: <rlib_error_2_0 in process_get_error_connection(self, private):
stderr is not a pipe.>
删除步骤
git rm R/simulate.R
- in R
devtools::document()
导致以下变化:modified: NAMESPACE deleted: R/simulate.R deleted: man/simulate.Rd
R CMD check .
产生上述错误。
我试过的
我发现 this issue 有类似的问题,因此尝试使用 install.packages(c('Rcpp', 'RcppArmadillo', 'httpuv'))
问题仍然存在。
我尝试 git grep -nrw "simulate"
搜索文件中定义的函数以查找被遗忘的文件用法,但没有显示任何内容。
进度更新
而不是 运行ning devtools::document()
,我只从文件 NAMESPACE
中手动删除了行 export(simulate)
。有了这个,行
import(Matrix)
import(PHENIX)
import(Rcpp)
import(RcppArmadillo)
import(doParallel)
import(mvtnorm)
保留在文件 NAMESPACE
.
这些行是根据我通过删除 R/simulate.R
:
...
#' @useDynLib myPackage
#' @export
#' @import CompQuadForm
#' @import doParallel
#' @import Rcpp
#' @import RcppArmadillo
#' @import Matrix
#' @import mvtnorm
#' @import PHENIX
simulate <- function(...) {...}
现在,R CMD check .
运行正确了。
我想这意味着我还不理解注释和 NAMESPACE
并且在 NAMESPACE
.
如果我提出问题的方式有问题,我也很乐意得到反馈。我也是新手发帖提问
谢谢!
已弃用的文件是唯一具有注释 #' @import Rcpp
的文件,该注释确保 devtools::document()
会在 NAMESPACE
文件中包含 import(Rcpp)
。
我通过注释使用 Rcpp 函数的包的主要 R 函数解决了这个问题 #' @import Rcpp
。
之后,devtools::document()
清理了自动生成的文件并保持包完好无损。
如果有人更了解 R 包开发,我将不胜感激,可以解释哪里出了问题,也许 link 解释注释和 NAMESPACE
文件的最佳资源!谢谢