2010-10-25 38 views
7

Tôi đang bận viết một gói cho khách hàng với ít kiến ​​thức về R. Với cấu trúc dữ liệu phức tạp của họ, tôi cần thiết lập "cơ sở dữ liệu" trong R chứa tấn thông tin thu được từ một bộ bảng tính mà họ nhận được từ một công ty khác. Vì họ không thể cài đặt SQL hoặc trên máy tính của họ (ICT có một số vấn đề về kiểm soát năng lượng ...), tôi đã viết một mô phỏng trong R, dựa trên cấu trúc thư mục cụ thể. Bây giờ tôi muốn chạy tự động, nhưng chỉ lần đầu tiên gói được tải. Một cái gì đó như .First.lib, nhưng sau đó .VeryFirst.: Chạy mã lần đầu tiên gói được cài đặt hoặc sử dụng

Bất kỳ ý tưởng nào về cách tải một đoạn mã vào lần đầu tiên gói được tải? Tôi thực sự không thể tìm thấy nó ở bất kỳ nơi nào trong sách hướng dẫn, vì vậy tất cả các con trỏ đều được chào đón.

+0

Tại sao không chỉ kiểm tra '.First.lib' hoặc' .onLoad' nếu "cơ sở dữ liệu" đã được tạo? –

+0

@Joshua: Tôi đã xem xét tương tự, nhưng tự hỏi nếu nó thực sự là có thể trong R để phát hiện nếu một gói được nạp lần đầu tiên. Tôi đã nhìn vào khả năng sử dụng các tập tin INSTALL là tốt, nhưng tôi không thực sự nắm bắt hoàn toàn nhưng làm thế nào họ phải được sử dụng. –

+1

Tôi không nghĩ rằng bạn có thể kiểm tra xem gói có được tải lần đầu tiên hay không. Nhưng nếu bạn kiểm tra "cơ sở dữ liệu" và nó không có ở đó, bạn tạo ra nó (chắc chắn sẽ xảy ra trong lần tải đầu tiên). Lần sau khi bạn tải gói, bạn kiểm tra "cơ sở dữ liệu", thấy rằng nó đã ở đó và tiếp tục. –

Trả lời

4

Đó là trong sách hướng dẫn.

Về cơ bản bạn có hai đường dẫn mã:

  1. gói mà không cần một không gian tên có thể sử dụng một hàm .First.lib(), thông thường là từ R/zzz.R

  2. gói với một không gian tên có thể sử dụng một hàm .onLoad(), cũng thường từ R/zzz.R .

Tôi đã sử dụng thủ thuật này như có bản cập nhật gói (!!) khi được tải. Điều đó không bắt buộc phải sử dụng NAMESPACE và chạy utils::update.packages() trước khi thực sự tải mã nhị phân.

+0

Thx cho câu trả lời, nhưng không những chức năng tải mã mỗi khi bạn tải gói, hoặc tôi đã nhận được các tập tin trợ giúp hoàn toàn sai? Tôi chỉ muốn gọi mã lần đầu tiên gói được tải. –

+0

Chắc chắn, vì vậy bạn sử dụng 'file.exists()' và bạn bè để kiểm tra xem cấu trúc tồn tại và bỏ qua việc tạo cấu trúc thứ hai, thứ ba, ... xung quanh. Nhưng bạn hỏi nơi để tạo nó khi khởi động, và tôi đã cố gắng trả lời câu hỏi đó. –

+0

Có thể cho một gói để tự cập nhật trên các cửa sổ không? Hay việc khóa tập tin lạ gây ra vấn đề? – hadley

0

Điều gì về việc chỉ định đường dẫn và danh pháp để họ đưa bảng tính vào. Bạn có thể recurse thư mục để cập nhật và các tập tin. Tôi làm điều này cho một vấn đề tương tự.

2010 08.xls 2010 09.xls

Bạn có thể sử dụng một readline() để nhắc nhở cho dữ liệu mới dãy cũng làm cho nó vì vậy họ chỉ cần gõ tháng mới. Và nếu thư mục thay đổi, không khó để dạy cho ai đó cách setwd() hoặc tự cập nhật nó bằng cách sử dụng tập lệnh kiểm tra thứ gì đó trên máy chủ cá nhân/công ty của bạn.

Họ có thực sự tải R để chạy gói không? Hoặc là tất cả các dòng lệnh?

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