Làm sạch môi trường làm việc hiệu quả trong R

Tác giả: Hoàng Đức Anh | 2019-01-25

Trong quá trình phân tích dữ liệu, ta thường xuyên phải tạo ra nhiều bảng tạm, biến đổi dữ liệu qua nhiều bước và cùng lúc làm việc với nhiều bảng khác nhau. Trong flow phân tích thông thường, ta sẽ phải tạo ra 1 bảng master chứa tất cả dữ liệu cần làm việc và phân tích dữ liệu từ trên tập dữ liệu đã được làm sạch đó. RAnalytics nhận thấy rất nhiều bạn chưa biết cách quản lý môi trường làm việc hiệu quả do để quá nhiều dataframe rác trong working environment. Trong bài viết này, RAnalyticssẽ hướng dẫn các bạn quản lý một cách làm sạch môi trường làm việc một cách hiệu quả.


Thông thường, ta có thể xóa các object không cần thiết một cách thủ công như sau.

library(dplyr)
rm(name_object)

Trong trường hợp xóa tất cả các object, ta có thể sử dụng câu lệnh

rm(list = ls())

Tuy nhiên, ngoài hai trường hợp trên, có trường hợp trong môi trường làm việc của chúng ta đang có khoảng 10 bảng hoặc hơn thế và ta cần giữ lại phân tích 1 bảng duy nhất. Lúc đó, cả hai cách trên đều không thực sự tối ưu. Để xử lý vấn đề trên, ta có thể sử dụng hàm setdiff. Xem ví dụ dưới đây

Giả sử trong môi trường làm việc của chúng ta đang có 10 file data đã qua các phép biến đổi dữ liệu và data_10 là file cuối cùng ta muốn giữ lại.

for (i in 1:10){
  assign(paste0("data_", i), mtcars)
}

ls()
##  [1] "data_1"  "data_10" "data_2"  "data_3"  "data_4"  "data_5"  "data_6" 
##  [8] "data_7"  "data_8"  "data_9"  "i"

Lúc này, nếu xóa từng object đơn lẻ sẽ rất mất thời gian, ta sử dụng hàm setdiff như sau.

setdiff(ls(), # Tập mẹ
        "data_10") # Tập con 
##  [1] "data_1" "data_2" "data_3" "data_4" "data_5" "data_6" "data_7"
##  [8] "data_8" "data_9" "i"

Như vậy, hàm setdiff cho phép chúng ta liệt kê các phần tử trong môi trường làm việc mà không chứa data_10. Đến lúc này, ta có thể xóa toàn bộ các object không cần thiết một cách đơn giản như sau.

rm(list = setdiff(ls(), "data_10"))
ls()
## [1] "data_10"

Trong trường hợp muốn giữ lại vài object cùng lúc, ví dụ data_2data_10, ta có thể làm đơn giản như sau.

rm(list = setdiff(ls(), c("data_10", "data_2")))

Như vậy, chúng ta đã học được cách làm sạch môi trường làm việc một cách hiệu quả. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn!

comments powered by Disqus