2012-08-15 44 views
10

Tôi đã viết một vài chức năng cho một gói có sử dụng đường dẫn tương đối như:Gói đường dẫn tương đối trong R

"./data/foobar.rds" 

Dưới đây là một chức năng ví dụ:

foo <- function(x) { 
x <- readRDS("./data/bar.rds") 
return(x) 
} 

Bây giờ, nếu tôi được là làm việc trong con đường phát triển của gói, điều này hoạt động như tôi mong đợi. Nhưng khi tôi tải gói, đường dẫn này sử dụng thư mục làm việc hiện tại thay vì đường dẫn tương đối của gói.

Làm thế nào để thiết lập nó sao cho đường dẫn cho các hàm trong một gói duy trì chúng trong các đường dẫn tương đối của gói?

+1

Xem 'system.file' và' .path.package' – Andrie

+0

Vì vậy, một cái gì đó như 'x <-? ReadRDS (dán (system.file (gói = "pkgname"),"/data/bar .rds ", sep =" "))'? –

+1

Nếu bạn muốn một cái gì đó hệ điều hành độc lập thử x <- 'readRDS (file.path (system.file (gói =" pkgName ")," dữ liệu "," bar.rds "))' – dickoa

Trả lời

5

Như ghi chú của Andrie, bạn có thể sử dụng system.file, "tìm thấy tên tệp đầy đủ trong các gói, v.v."

x <- readRDS(system.file("help", "aliases.rds", package="MASS")) 
+0

Tại sao "trợ giúp" cần thiết? –

+0

'dir (system.file (" help ", package =" MASS "))' – dickoa

+0

@BrandonBertelsen - Cuộc gọi tới 'system.file()' giải quyết thành '/MASS/help/aliases.rds', là nơi tệp được đọc nằm. (Tất cả các đối số không được đặt tên ban đầu được hấp thụ bởi '...', mà 'system.file()' xử lý như một tập hợp các thư mục con và các tệp, từ đó nó xây dựng các đường dẫn trong gói đã cho.) –

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