簡體   English   中英

NAMESPACE 中缺少導入(Rcpp)導致 R CMD 檢查測試期間出現 C++ 庫錯誤

[英]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
  • 在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM