пакет?
Обнаружил после установки из-за подсказок IDE, getNamespaceExports('my_package') выдает примерно такой список
[1] "setRcppClass" "exposeClass"
[3] "prompt" ".__C__C++Field"
[5] "library.dynam.unload" "populate"
[7] "initialize" ".__T__$<-:base"
[9] "sizeof" "cppFunction"
[11] "getRcppVersion" ".__C__C++Function"
[13] "evalCpp" ".__C__C++Constructor"
[15] "loadRcppClass" ".__T__prompt:utils"
[17] ".__C__C++OverloadedMethods" "LdFlags"
[19] "hllrst_run_threads" ".__T__show:methods"
[21] "loadModule" ".__T__[<-:base"
[23] "cpp_object_initializer" ".__T__.DollarNames:utils"
[25] "compileAttributes" ".__T__initialize:methods"
[27] ".__C__C++Object" "system.file"
[29] ".__T__[[<-:base" "sourceCpp"
[31] "cpp_object_dummy" "Rcpp.plugin.maker"
[33] "RcppLdFlags" ".__C__RcppClass"
[35] "Module" ".__T__[:base"
[37] "registerPlugin" "hllrst_random_number"
[39] "loadRcppModules" ".DollarNames"
[41] ".__C__C++Class" ".__T__formals<-:base"
[43] "formals<-" "demangle"
[45] ".__T__$:base" ".__C__Module"
[47] "Rcpp.package.skeleton" "show"
который, естественно, включает и полезные функции.
Тут по сути все зависимости твоего пакета представлены, в том числе от Rcpp.
Я понимаю, но проблема в другом. Если я возьму другой пакет, в котором есть несколько CPP функций, собранный через Rcpp и roxygen2 мной же, то там в публичном экспорте собственно то, что я задекларировал, и никакого мусора. Здесь же - в минимальном пакете с буквально двумя экспортируемыми CPP функциями - куча мусора, который видно (на мой субъективный взгляд) быть не должно. Вопрос почему так, я подумал может кто с таким сталкивался и знает в чем дело. Ощущение, что какая-то зависимость прописана неправильно
Как пакет собираешь?
Что в импортах? Должно быть: importFrom(Rcpp,evalCpp) useDynLib(mypkg, .registration = TRUE)
Это из-за devtools::load_all(). > library(uaparser) > getNamespaceExports("uaparser") [1] "parse_browser" "parse_device_type" "parse_user_agent" [4] "update_regexes" "parse_os" "parse_device" > devtools::load_all(".") Loading uaparser > getNamespaceExports("uaparser") [1] "library.dynam.unload" "system.file" [3] "parse_browser" "parse_device_type" [5] "_uaparser_uap_release" "download.file" [7] "uap_release" "_uaparser_parse_device" [9] "evalCpp" "parse_user_agent" [11] "_uaparser_uap_init" "_uaparser_parse_os" [13] "update_regexes" "parse_os" [15] "parse_device" "_uaparser_parse_user_agent" [17] "_uaparser_parse_browser" "_uaparser_parse_device_type" [19] "uap_init" "onUnload"
# Generated by roxygen2: do not edit by hand importFrom(Rcpp,sourceCpp) useDynLib(hellorust)
load_all нигде не используется
Значит где-то используется. Его RStudio может где-то вызывать. Попробуй поставить пакет через R CMD build/R CMD INSTALL и посмотреть Rscript -e 'getNamespaceExports("mypkg")'.
Ок, спасибо, буду смотреть где этот вызов мог затеряться
У меня только evalCpp импортируется. https://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-package.pdf Пункт 2.8.
Ну у меня в нормальном пакете так же, а тут просто я попытался скрестить нескрещиваемое и получается не очень)
Обсуждают сегодня