2012-04-25 29 views
23

Được rồi, lần đầu tiên thử viết một gói R và tôi bị kẹt. Đây là cách tôi tạo ra các gói:Khi viết gói R của riêng tôi, tôi dường như không thể nhận các gói khác để nhập chính xác

package.skeleton("pkg",code_files=some.filenames) 
roxygenize("okg") 

Tôi đang sử dụng roxygen2 và có hàng nhập khẩu sau đây trong tôi "pkg-package.R" file:

@import data.table zoo lubridate 

Từ một thiết bị đầu cuối, tôi sau đó chạy:

R CMD build pkg 
R CMD check pkg 
R CMD install pkg 

trong giai đoạn kiểm tra, tôi nhận được những lời cảnh báo sau đây:

** chuẩn bị gói để tải lười biếng
Cảnh báo: thay thế trước đó nhập khẩu 'giờ' khi tải 'lubridate'
Cảnh báo: thay thế trước đó nhập khẩu 'mday' khi tải 'lubridate'
Cảnh báo: thay thế nhập khẩu trước 'tháng' khi tải 'lubridate'
Cảnh báo: thay thế trước đó nhập khẩu 'wday' khi tải 'lubridate'
Cảnh báo: thay thế nhập khẩu trước 'tuần' khi tải 'lubridate'
Cảnh báo: thay thế trước đó nhập khẩu 'yday' khi tải 'lubridate'
Cảnh báo: thay thế lần nhập trước 'năm' khi tải 'lubridat e '
** giúp đỡ
* cài đặt chỉ số giúp đỡ
** chỉ số xây dựng gói ...
** kiểm tra nếu gói cài đặt có thể được nạp
điệp Cảnh báo:
1: thay thế nhập khẩu trước' giờ 'khi tải' lubridate '
2: thay thế lần nhập trước' ngày 'khi tải' lubridate '
3: thay thế nhập trước' tháng 'khi tải' lubridate '
4: thay thế nhập trước' ngày 'khi tải ing 'lubridate'
5: thay thế nhập khẩu trước 'tuần' khi tải 'lubridate'
6: thay thế trước đó nhập khẩu 'yday' khi tải 'lubridate'
7: thay thế nhập khẩu trước 'năm' khi tải 'lubridate'

Tôi thực sự không chắc chắn nên làm gì trong số đó, nhưng chúng có vẻ như cảnh báo điển hình từ việc ghi đè nội dung trong không gian tên.Trong mọi trường hợp, tôi có thể cài đặt gói này, nhưng đây là những gì xảy ra khi tôi cố gắng sử dụng nó:

thư viện (pkg)
Overriding + và - Phương pháp cho POSIXt, ngày và difftime
thông điệp cảnh báo:
1: thay thế trước đó nhập khẩu 'giờ' khi tải 'lubridate'
2: thay thế trước đó nhập khẩu 'mday' khi tải 'lubridate'
3: thay thế nhập khẩu trước 'tháng' khi tải 'lubridate'
4: thay thế lần nhập trước 'wday' khi tải 'lubridate'
5: thay thế lần nhập trước 'tuần' khi tải 'lubridate'
6: thay thế lần nhập trước 'yday' khi tải 'lubridate'
7: thay thế nhập trước đó 'năm 'khi tải 'lubridate'
d < - my.function (arg1, arg2)
Lỗi trong MATCH (x, x): không thể tìm thấy chức năng "MATCH"

Sử dụng traceback(), Tôi phát hiện ra rằng điều này đang được tạo ra duri ng một cuộc gọi đến merge.zoo(). Vì vậy, tôi đã cố gắng tải sở thú bằng tay trong phiên R của tôi và thì đấy, chức năng hoạt động chính xác mà không có thông báo lỗi.

Tôi đã thử thay đổi thứ tự nhập khẩu bằng tay trong cả tệp "pkg-package.R", cũng như trong NAMESPACE. Dựa trên một cái gì đó tôi tìm thấy ở nơi khác, tôi đã không thêm bất kỳ Nhập khẩu hoặc Phụ thuộc vào DESCRIPTION, tuy nhiên. Cứu giúp?

+1

Tôi khuyên bạn nên đặt các gói này vào 'Phụ thuộc' của bạn trong 'DESCRIPTION'. –

+1

'Nhập khẩu', tôi tin rằng – baptiste

Trả lời

25

Cảnh báo là do data.table và lubridate đều xác định một biểu tượng hour, v.v. xem data.table::hourlubridate::hour. Bạn có thể tránh điều này bằng cách chỉ nhập các hàm từ lubridate/data.table mà bạn muốn, thay vì toàn bộ gói; tệp NAMESPACE chuẩn sẽ chứa

importFrom(lubridate, hour) 

ví dụ. Trong roxygen2 bạn sẽ sử dụng thẻ:

@importFrom lubridate hour 

Vấn đề Đội hình thi đấu có lẽ là bởi vì merge được cử không đúng cách, có lẽ vì sở thú nên có trong nó không gian tên S3method(merge, zoo) hơn export(merge.zoo), như mô tả trong Viết R Extensions, 1.6.2 . Giải pháp ở đây là liên hệ với người bảo trì zoo, packageDescription('zoo')$Maintainer (người bảo trì đủ thông thạo R rằng tôi cảm thấy mình đã chẩn đoán sai ...).

+0

Đây là câu trả lời hữu ích, nhưng chỉ cần theo dõi. Vì vậy, nếu tôi chỉ nhập một hàm duy nhất như "giờ", tôi có cần nhập tất cả các hàm nội bộ hoặc có khả năng riêng tư không? Hoặc 'importFrom' có biết nhập bất kỳ chức năng riêng tư hoặc phụ thuộc nội bộ nào không? – krishnab

+2

@krishnab chức năng tìm kiếm các biểu tượng mà họ sử dụng đầu tiên trong môi trường của riêng mình, sau đó trong môi trường trong đó hàm được xác định, do đó data.table chức năng data.table :: giờ sử dụng sẽ được tìm thấy tự động. –

+2

Điều gì sẽ xảy ra khi bạn cần sử dụng nhập cho nhiều gói để có quyền truy cập vào các lớp đối tượng cụ thể và chúng có xung đột tên? Tôi đang chạy vào này với spatstat và raster (khu vực, xoay, thay đổi). Tôi không thể sử dụng importFrom vì tôi đang sử dụng nhiều hàm từ cả hai và cần các lớp gói. Có cách nào để che giấu ba hàm raster xung đột với spatstat không? Tôi nên lưu ý rằng chỉ sử dụng phụ thuộc vào DESCRIPTION không hoạt động. –

1

Là giải pháp tạm thời cho lỗi MATCH, tôi đã liệt kê thành công gói zoo trong phần Depends: trong gói DESCRIPTION của gói.

Các vấn đề liên quan