[英]Missing import(Rcpp) in NAMESPACE leads to C++ library error during R CMD check of tests
我正在研究使用 Rcpp 的 R package。 我接手了這個有很多問題的項目,我正在努力解決它們。 問題是我不知道如何在這種情況下創建一個最小的復制示例,因為 package 非常大,而且我沒有參與早期設置。 我將不勝感激有關如何 go 的建議,我是在 R/Rcpp 中編寫包的新手。
I got it into a state that it passes automated R CMD checks both on macOS and Linux in Github Actions.
有一個名為“R/simulate.R”的已棄用文件,其中包含一個不再使用的 function。 我正在嘗試刪除此文件。
相關線路是:
...
#' @useDynLib myPackage
#' @export
#' @import CompQuadForm
#' @import doParallel
#' @import Rcpp
#' @import RcppArmadillo
#' @import Matrix
#' @import mvtnorm
#' @import PHENIX
simulate <- function(...) {...}
我使用devtools::document()
來更新 package 中的自動生成文件。
有了這個,線條
import(Matrix)
import(PHENIX)
import(Rcpp)
import(RcppArmadillo)
import(doParallel)
import(mvtnorm)
已從文件NAMESPACE
中刪除。
刪除后,當我運行R CMD check.
在macOS-latest
上,我收到以下錯誤:
* 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.
在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
devtools::document()
導致以下更改: modified: NAMESPACE deleted: R/simulate.R deleted: man/simulate.Rd
R CMD check.
產生上述錯誤。我發現這個問題有類似的問題,因此嘗試使用install.packages(c('Rcpp', 'RcppArmadillo', 'httpuv'))
重新安裝軟件包
問題仍然存在。
我嘗試git grep -nrw "simulate"
來搜索文件中定義的 function 以查找文件的忘記使用,但沒有顯示任何內容。
我沒有運行devtools::document()
,而是僅從文件NAMESPACE
中手動刪除了行export(simulate)
。 有了這個,線條
import(Matrix)
import(PHENIX)
import(Rcpp)
import(RcppArmadillo)
import(doParallel)
import(mvtnorm)
保留在文件NAMESPACE
中。
這些行是從對 function 的注釋自動生成的,我通過刪除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()
將import(Rcpp)
包含在NAMESPACE
文件中。
我通過用#' @import Rcpp
注釋使用 Rcpp 函數的 package 的主要 R function 解決了這個問題。
之后, devtools::document()
清理了自動生成的文件並保持 package 完好無損。
如果有人更好地了解 R package 開發,可以解釋出了什么問題,並且可能鏈接到解釋注釋和NAMESPACE
文件的最佳資源,我將不勝感激! 謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.