Thông điệp có phần phức tạp. Tôi nhìn xung quanh cũng trong các gói khác và tôi thấy rằng useDynLib(packagename)
trong tệp NAMESPACE đã được thay thế bằng useDynLib(packagename, .registration = TRUE)
.
Bên cạnh đó, tôi đã thêm một tập tin .c
, tên registerDynamicSymbol
trong thư mục src/
với đoạn mã sau:
// RegisteringDynamic Symbols
#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>
void R_init_markovchain(DllInfo* info) {
R_registerRoutines(info, NULL, NULL, NULL, NULL);
R_useDynamicSymbols(info, TRUE);
}
tôi đã đề nghị này từ GitHub Rcpp. Tham chiếu chuẩn tắc là trong Writing R Extensions
Ngoài ra R Devel Mailinglist cung cấp các thông tin bổ sung.
CẬP NHẬT
Cách tiếp cận đơn giản trực tiếp nhất là:
- sử dụng dòng điện Version Phát triển R (mà cuối cùng sẽ trở thành 3.4)
- Chạy
tools::package_native_routine_registration_skeleton(".")
và sao chép và dán toàn bộ sản lượng trong một tệp packagename_init.c
để được đặt trong src/
- cập nhật
NAMESPACE
, xác minh rằng useDynLib(packagename, .registration = TRUE)
- Nếu cần thiết, thay thế các
exportPattern
với export(list of object to be exported)
CẬP NHẬT 18 tháng 7
Theo ghi nhận của @Symbolix sử dụng phiên bản mới nhất của R và DevTools RStudio của điểm 2. (init.c các tập tin) xuất hiện được xử lý bởi một trong hai devtools (sử dụng số kiểm tra RStudio) hoặc các gói công cụ.
Nguồn
2017-02-20 08:28:02
Tôi đang sử dụng '@useDynLib pkg fun' trong gói' devtools' để đăng ký các hàm C. [Nhưng có vẻ như có nhiều hơn thế.] (Https://www.r-project.org/doc/Rnews/Rnews_2001-3.pdf#section*.51) – Crops
Tôi có cùng một vấn đề - tôi đã sử dụng đề xuất của bạn và đây là kết quả: Không tìm thấy cuộc gọi đến: 'R_registerRoutines' Điều đó có nghĩa là nó đã tìm thấy câu lệnh R_useDynamicSymbols. Nhưng tôi tự hỏi bây giờ, tại sao các lỗi registerRoutines cũng không biến mất ... – stats0007
Không phải thực tế là tôi đang tạo ra.C gọi với funtionname thay vì "functionName" và không có package = "mypackage" chỉ ra rằng đăng ký thực sự hoạt động ...? – stats0007