发布Rpackage:使用Rcpp的asNamespace(ns)中的错误

问题描述 投票:2回答:1

正在研究一个小的Rcpp程序包以使用Boost及其在C中的某些几何函数。

完成函数的编写,一切工作正常。在推送到GitHub之前,最后一次测试一切正常(Clean and Rebuild和测试功能)。一旦我仔细检查了目录,所有目录都干净地存储在GitHub中,就从本地计算机上删除了该目录。还应该注意,我在此上运行了Roxygen2并管理NAMESPACE文件。

克隆目录后返回Clean and Rebuild,出现以下错误:

==> Rcpp::compileAttributes()

* Updated R/RcppExports.R

==> R CMD INSTALL --preclean --no-multiarch --with-keep.source MinimumRcpp

* installing to library ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library’
* installing *source* package ‘MinimumRcpp’ ...
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG  -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include   -fPIC  -Wall -g -O2 -c RcppExports.cpp -o RcppExports.o
** libs
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG  -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include   -fPIC  -Wall -g -O2 -c findParetoSet.cpp -o findParetoSet.o
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG  -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include   -fPIC  -Wall -g -O2 -c kintersection.cpp -o kintersection.o
clang++ -std=gnu++11 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o MinimumRcpp.so RcppExports.o findParetoSet.o kintersection.o -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /Library/Frameworks/R.framework/Versions/3.5/Resources/library/MinimumRcpp/libs
** R
** byte-compile and prepare package for lazy loading
Error in asNamespace(ns) : not a namespace
Error : unable to load R code in package ‘MinimumRcpp’
ERROR: lazy loading failed for package ‘MinimumRcpp’
* removing ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/MinimumRcpp’

Exited with status 1.

当然,代码中没有任何变化。但是,我确实有以下.gitignore文件:

# /.gitignore
inst/lib
.Rproj.user     ## Could this be an issue? 
.Rproj.user/    ## Could this be an issue? 
.Rproj.user/**  ## Could this be an issue? 
src/*.o
src/*.so
src/*.dll
src/symbols.rds
.Rhistory
.RData
.DS_Store

## QtCreator
Rcpp.pro
Rcpp.pro.user
*.autosave
.#*

*.tar.gz

vignettes/*_cache

## GNU global
GPATH
GRTAGS
GTAGS

##
local/

## docker helpers
docker/*sh
docker/*/*.sh
# /.Rbuildignore
debian
inst/doc/html
inst/doc/latex
inst/doc/man
inst/doc/jss.bst
vignettes/jss.bst
^.*\.Rproj$
^\.Rproj\.user$
vignettes/notyet
doxyfile
\.travis\.yml
\.dir-locals\.el
\.clang_format
vignettes/getCurrentVersionsOfCitedPackages.R
^Contributing.md$
^\.codecov\.yml$
inst/include/Rcpp.h.new
inst/include/Rcpp.h.old
LICENSE
.*\.tar\.gz$
\.editorconfig
docker
^GPATH
^GRTAGS
^GTAGS
^local
vignettes/Makefile
vignettes/rmd
\.github

是否有可能遗漏了一些用于构建软件包的软件包数据,并导致了当前问题?

任何帮助将不胜感激。此外,有关如何调试此问题的任何建议都将有所帮助,因为当前的输出消息非常模糊,使我无路可走。

这里是可复制性的GitHub存储库:https://github.com/eduardoRubioG/MinimumRcpp

r rcpp r-package
1个回答
4
投票

菜鸟错误,但很严重:

  • 从不[[ever将脚本文件保存在R/目录中

  • 目录中的所有内容(我们指的是

    everything

  • )(如果它看起来像R代码,_i.e。.R结尾)]
  • [您在其中留下了一个带有library(MinimumRcpp)调用的脚本,所以现在您的程序包字节码编译希望自己提供源代码->这不是一个好计划
  • 简而言之,保留这样的脚本,但将其放在

    例如

  • local/中,并通过local/排除.Rbuildignore
加上重要的风格课

    请勿在您的代码中留下rm(list = ls(all = TRUE))
  • 因此,如果您执行mv R/script.R R/script.R.txt并进行重建,那么一切都很好。

    (我收到六次警告,因为n不是size_t,而是与之比较。您可能想更早地投射它。]

  • © www.soinside.com 2019 - 2024. All rights reserved.