Я перестроил пакет, который я разрабатываю (и который я не обновляю с одного месяца), и обнаружил, что все мои тесты завершаются с ошибкой:
Error in myCPlusPlusFun(... :
object 'myPackage_myCPlusPlusFun' not found
Затем я узнал, что аргумент PACKAGE = myPackage
отсутствует во всех функциях в моем RcppExports.R
файл, смотрите вывод git diff
:
myCPlusPlusFun <- function(X) {
- invisible(.Call('myPackage_myCPlusPlusFun', PACKAGE = 'myPackage', X))
+ invisible(.Call(myPackage_myCPlusPlusFun, X))
Есть идеи, что случилось? Я думаю, мне нужно иметь
invisible(.Call('myPackage_myCPlusPlusFun', PACKAGE = 'myPackage', X))
автоматически генерируется строка при сборке пакета (?)
Спасибо!
РЕДАКТИРОВАТЬ: у меня теперь есть следующие строки в моем NAMESPACE
файл:
exportPattern("^[[:alpha:]]+")
importFrom(Rcpp,evalCpp)
useDynLib(locus, .registration = TRUE)
(плюс некоторые другие imports
а также exports
).
Мне также пришлось недавно добавить файл C для регистрации динамических символов со следующим содержанием:
#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>
void R_init_myPackage(DllInfo* info) {
R_registerRoutines(info, NULL, NULL, NULL, NULL);
R_useDynamicSymbols(info, TRUE);
}
этот последний файл все еще нужен?
Да, «все изменилось», потому что R 3.4.0 сделал нас, и мы соответствуем.
Вторая часть, безусловно, в порядке — так должно выглядеть.
Пожалуйста, проверьте это
— у вас есть сгенерированный src/RcppExports.cpp
— у вас есть правильная регистрационная информация в NAMESPACE
За последние несколько недель были обновлены многочисленные пакеты, это обычно работает. Если вы сомневаетесь, возможно, создайте быстрый одноразовый пакет через
Rcpp.package.skeleton()
и сравни.
Также обратите внимание, что у нас было два угловых случая, которые нуждались в исправлении, поэтому есть промежуточный выпуск, если он вам нужен (см. Публикацию по rcpp-devel) — но
Я не думаю, что вы делаете.
Других решений пока нет …