Khi tôi cần lọc data.frame, nghĩa là trích xuất các hàng đáp ứng một số điều kiện nhất định, tôi thích sử dụng subset
hàm:
subset(airquality, Month == 8 & Temp > 90)
Thay vì [
chức năng:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Có hai lý do chính cho sở thích của tôi:
Tôi thấy mã đọc tốt hơn, từ trái sang phải. Ngay cả những người không biết gì về R cũng có thể nói những gì
subset
tuyên bố trên đang làm.Vì các cột có thể được gọi là các biến trong
select
biểu thức, tôi có thể lưu một vài tổ hợp phím. Trong ví dụ của tôi ở trên, tôi chỉ phải gõairquality
một lần vớisubset
, nhưng ba lần với[
.
Vì vậy, tôi đã sống hạnh phúc, sử dụng subset
ở mọi nơi vì nó ngắn hơn và đọc tốt hơn, thậm chí ủng hộ vẻ đẹp của nó cho các lập trình viên R của tôi. Nhưng hôm qua thế giới của tôi tan vỡ. Trong khi đọc subset
tài liệu, tôi nhận thấy phần này:
Cảnh báo
Đây là một chức năng tiện lợi dành cho sử dụng tương tác. Để lập trình, tốt hơn là sử dụng các hàm tập hợp tiêu chuẩn như [và đặc biệt là việc đánh giá không chuẩn của tập hợp đối số có thể có các hậu quả không lường trước được.
Ai đó có thể giúp làm rõ ý nghĩa của các tác giả?
Đầu tiên, ý nghĩa của việc " sử dụng tương tác " là gì? Tôi biết phiên tương tác là gì, trái ngược với tập lệnh chạy ở chế độ BATCH nhưng tôi không thấy sự khác biệt của nó.
Sau đó, bạn có thể vui lòng giải thích " đánh giá không chuẩn của tập hợp đối số " và tại sao nó nguy hiểm, có thể cung cấp một ví dụ không?
dplyr::filter
có cùng một vấn đề. Tức là nếu môi trường xảy ra có một biến với tên đó, nó sẽ sử dụng nó thay vì biến trong khung dữ liệu. Làm cho việc gỡ lỗi khó hiểu!
with(airquality, airquality[Month == 8 & Temp > 90, ])