2013-02-14 17 views
12

Có vị trí được xác định trước trong đó gói R có thể lưu trữ dữ liệu được lưu trong bộ nhớ cache không? Dữ liệu sẽ vẫn tồn tại trong các phiên. Tôi đã suy nghĩ về việc tạo ra một thư mục con của ${R_LIBS_USER}/package_name, nhưng tôi không chắc chắn nếu điều này là xách tay và nếu điều này là "cho phép" nếu gói của tôi được cài đặt trên toàn hệ thống.Có một vị trí liên tục luôn ghi được có thể được sử dụng làm bộ đệm dữ liệu theo gói không?

Ý tưởng là như sau: Tạo một kịch bản R mydata.R trong data thư mục con của gói đó sẽ được thực hiện bằng cách gọi data(mydata) (theo tài liệu của data()). Kịch bản lệnh này sẽ tải dữ liệu từ internet và lưu trữ nó, nếu nó chưa được lưu trữ trước đó. (Nếu dữ liệu đã được lưu trữ, bộ đệm sẽ được sử dụng.) Ngoài ra, một chức năng sẽ được cung cấp để làm mất hiệu lực bộ nhớ cache và/hoặc để kiểm tra xem phiên bản dữ liệu mới có sẵn trực tuyến hay không.

Đây là từ tài liệu của data():

Hiện nay, bốn định dạng của tập tin dữ liệu được hỗ trợ:

  1. tệp có đuôi '.R' hoặc '.r' là nguồn() d, với thư mục làm việc R thay đổi tạm thời vào thư mục chứa tập tin tương ứng. (Dữ liệu đảm bảo rằng các gói utils được đính kèm, trong trường hợp nó đã được chạy thông qua dữ liệu utils ::.)

  2. ...

Thật vậy, việc tạo ra một tập tin fortytwo.R trong data thư mục con của một gói với nội dung sau:

fortytwo = data.frame(answer=42) 

và sau đó thực hiện data(fortytwo) tạo ra một biến khung dữ liệu fortytwo. Bây giờ câu hỏi đặt ra là: Ở đâu sẽ fortytwo.R lưu dữ liệu vào bộ nhớ cache nếu khó tính toán?

EDIT: Tôi đang nghĩ về việc tạo hai gói: Gói "dữ liệu" cung cấp dữ liệu và gói "mã" hoạt động trên đó. Câu hỏi liên quan đến gói "dữ liệu": Ở đâu có thể lưu trữ các tệp trong bộ nhớ cho mỗi người dùng để lưu trữ trong suốt các phiên R và có thể truy cập từ các dự án R khác nhau?

Related: Package that downloads data from the internet during installation.

+2

Bạn có thể muốn xem https://github.com/hadley/rappdirs - đó là một cổng AppDirs, là thư viện python cố gắng tìm đúng thư mục theo cách cụ thể cho hệ điều hành. – hadley

+0

Chỉ cố gắng làm rõ: Bạn có nghĩa là nơi dữ liệu có thể được lưu trữ sau khi nó đã được xử lý bởi một tập lệnh R không? Nói cách khác, câu hỏi của bạn có thực sự về dữ liệu từ gói dữ liệu hay dữ liệu được tạo ra như là đầu ra từ bất kỳ quá trình xử lý nào đã diễn ra không? Nó * âm thanh * như sau. – A5C1D2H2I1M1N2O1R2T1

+0

@hadley: Có khả năng điều này sẽ sớm xuất hiện trên CRAN không? Nếu không có cách R cụ thể để làm điều này (như đặt nó vào một thư mục con của '$ {R_USER_LIBS}), tôi sẽ sẵn sàng sử dụng gói của bạn. – krlmlr

Trả lời

-2

Bạn đã xem cơ sở dữ liệu trong bộ nhớ chưa? H2 & Redis có các liên kết trong R qua RH2 & rredis- cả hai đều cho phép bạn chia sẻ dữ liệu qua các phiên r cho đến khi phiên tạo đang hoạt động. để có sự bền bỉ trong các phiên không đồng thời, bạn cần phải ghi dữ liệu của mình vào đĩa (giả sử bạn không thể tạo lại dữ liệu khi đang di chuyển - sẽ đánh bại mục đích của câu hỏi này) và tôi tin rằng dữ liệu gói sẽ là một lựa chọn tốt. Bằng cách đó, bạn có thể thêm chức năng cập nhật khởi chạy mọi lúc bạn tải gói (ví dụ: nếu gói mã có phụ thuộc đúng)

Ví dụ là gói RWeka & RWekaJars. Hãy xem chúng trên CRAN, và nó sẽ khá dễ dàng để hiểu cách chúng hoạt động.

+0

Tôi có thể ghi dữ liệu vào đĩa theo định dạng gốc của R. Tôi chỉ cần tìm một nơi * nơi * Tôi có thể đặt chúng để các phiên R khác sẽ tìm thấy nó ở đó. – krlmlr

+0

Như tôi đã nói, tôi sử dụng cơ sở dữ liệu trong bộ nhớ. H2 & redis phục vụ tôi rất tốt. – jackStinger

1

Không có vị trí được xác định hoàn toàn cho bộ nhớ đệm liên tục theo gói cụ thể trong R.Tuy nhiên, R.cache package cung cấp giao diện để tạo và quản lý dữ liệu được lưu trong bộ nhớ cache. Dường như nó có thể hữu ích cho kịch bản của bạn.

Khi người dùng tải R.cache (library(R.cache)), họ nhận được dấu nhắc sau:

The R.cache package needs to create a directory that will hold cache files. 
It is convenient to use one in the user's home directory, because it remains 
also after restarting R. Do you wish to create the '~/.Rcache/' directory? If 
not, a temporary directory (/tmp/RtmpqdUcbP/.Rcache) that is specific to this 
R session will be used. [Y/n]: 

Sau đó, họ có thể chọn để tạo ra các thư mục bộ nhớ cache trong thư mục chính của họ, đó là lẽ dai dẳng, hoặc để tạo ra một thư mục phiên cụ thể. Nếu bạn làm cho gói dữ liệu của bạn phụ thuộc vào R.cache, bạn có thể kiểm tra sự tồn tại của (các) đối tượng được lưu trong hàm hook .onLoad() và tải xuống dữ liệu nếu nó không có ở đó. Ngoài ra, bạn có thể làm điều này theo cách được đề xuất trong câu hỏi của riêng bạn.

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