Chỉ với 4GB RAM (chạy Windows 10, do đó, hãy tạo khoảng 2 GB trở lên thực tế 1GB) tôi đã phải thực sự cẩn thận với việc phân bổ.
Tôi sử dụng data.table gần như độc quyền.
Hàm 'fread' cho phép bạn đặt thông tin theo tên trường khi nhập; chỉ nhập các trường thực sự cần thiết để bắt đầu. Nếu bạn đang sử dụng cơ sở R đọc, hãy bỏ qua các cột giả ngay sau khi nhập.
Như 42- gợi ý, khi nào có thể tôi sẽ tập hợp con trong các cột ngay sau khi nhập thông tin.
Tôi thường xuyên rm () các đối tượng từ môi trường ngay khi chúng không còn cần thiết, ví dụ như trên dòng tiếp theo sau khi sử dụng chúng để tập hợp một thứ khác và gọi gc ().
'fread' và 'fwrite' từ data.table có thể rất nhanh bằng cách so sánh với cơ sở R đọc và ghi.
Như kpierce8 gợi ý, tôi hầu như luôn luôn viết mọi thứ ra khỏi môi trường và đưa nó trở lại, ngay cả với hàng ngàn / hàng trăm ngàn tệp nhỏ để vượt qua. Điều này không chỉ giữ cho môi trường 'sạch' và giữ cho việc cấp phát bộ nhớ ở mức thấp mà có thể do thiếu RAM trầm trọng, R có xu hướng thường xuyên gặp sự cố trên máy tính của tôi; thực sự thường xuyên Có thông tin được sao lưu trên chính ổ đĩa khi mã tiến triển qua các giai đoạn khác nhau có nghĩa là tôi không phải bắt đầu ngay từ đầu nếu nó gặp sự cố.
Kể từ năm 2017, tôi nghĩ rằng các ổ SSD nhanh nhất đang chạy khoảng vài GB mỗi giây thông qua cổng M2. Tôi có ổ SSD 50 GB Kingston V300 (550MB / s) thực sự cơ bản mà tôi sử dụng làm ổ đĩa chính (có Windows và R trên đó). Tôi giữ tất cả các thông tin số lượng lớn trên một đĩa WD 500GB giá rẻ. Tôi di chuyển các tập dữ liệu sang SSD khi tôi bắt đầu làm việc với chúng. Điều này, kết hợp với 'fread'ing và' fwrite'ing mọi thứ đã hoạt động rất tốt. Tôi đã thử sử dụng 'ff' nhưng thích cái trước hơn. Tốc độ đọc / ghi 4K có thể tạo ra vấn đề với điều này; Sao lưu một phần tư triệu tệp 1k (trị giá 250 MB) từ SSD sang đĩa có thể mất nhiều giờ. Theo như tôi biết, vẫn chưa có gói R nào có thể tự động tối ưu hóa quy trình 'chunkization'; ví dụ: xem người dùng có bao nhiêu RAM kiểm tra tốc độ đọc / ghi của RAM / tất cả các ổ đĩa được kết nối và sau đó đề xuất giao thức 'chunkization' tối ưu. Điều này có thể tạo ra một số cải tiến quy trình công việc / tối ưu hóa tài nguyên quan trọng; ví dụ: chia nó thành ... MB cho ram -> chia nó thành ... MB cho SSD -> chia nó thành ... MB trên đĩa -> chia nó thành ... MB trên băng. Nó có thể lấy mẫu các tập dữ liệu trước để cung cấp cho nó một thanh đo thực tế hơn để làm việc.
Rất nhiều trong những vấn đề tôi đã làm việc trên R liên quan đến hình thành sự kết hợp và hoán vị cặp, gấp ba vv, mà chỉ làm cho có RAM hạn chế hơn một giới hạn như họ sẽ thường ít nhất là theo cấp số nhân mở rộng tại một số điểm. Điều này đã khiến tôi tập trung rất nhiều vào chất lượng trái ngược với số lượng thông tin bắt đầu với chúng, thay vì cố gắng làm sạch nó sau đó, và vào chuỗi hoạt động chuẩn bị thông tin bắt đầu (bắt đầu bằng hoạt động đơn giản nhất và tăng độ phức tạp); ví dụ: tập hợp con, sau đó hợp nhất / nối, sau đó hình thành tổ hợp / hoán vị, v.v.
Dường như có một số lợi ích khi sử dụng cơ sở R đọc và viết trong một số trường hợp. Chẳng hạn, việc phát hiện lỗi trong 'fread' rất tốt nên khó có thể cố gắng đưa thông tin thực sự lộn xộn vào R để bắt đầu dọn dẹp. Base R dường như cũng dễ dàng hơn rất nhiều nếu bạn đang sử dụng Linux. Base R dường như hoạt động tốt trong Linux, Windows 10 sử dụng ~ 20GB dung lượng đĩa trong khi Ubuntu chỉ cần vài GB, RAM cần thiết với Ubuntu thấp hơn một chút. Nhưng tôi đã nhận thấy một số lượng lớn các cảnh báo và lỗi khi cài đặt các gói của bên thứ ba trong (L) Ubuntu. Tôi không khuyên bạn nên đi quá xa khỏi (L) Ubuntu hoặc các bản phân phối cổ phiếu khác với Linux vì bạn có thể mất rất nhiều khả năng tương thích tổng thể, nó làm cho quá trình gần như vô nghĩa (tôi nghĩ rằng "sự thống nhất" sẽ bị hủy trong Ubuntu vào năm 2017 ).
Hy vọng rằng một số trong đó có thể giúp đỡ những người khác.