Các yếu tố có thể giúp ngăn ngừa một số lỗi lập trình trong R: Bạn không thể thực hiện kiểm tra bình đẳng cho các yếu tố sử dụng các cấp khác nhau và bạn được cảnh báo khi thực hiện lớn hơn/ít hơn kiểm tra các yếu tố không có thứ tự.An toàn hợp nhất khung dữ liệu theo các cột yếu tố
a <- factor(letters[1:3])
b <- factor(letters[1:3], levels=letters[4:1])
a == b
## Error in Ops.factor(a, b) : level sets of factors are different
a < a
## [1] NA NA NA
## Warning message:
## In Ops.factor(a, a) : < not meaningful for factors
Tuy nhiên, trái với mong đợi của tôi, việc kiểm tra này không được thực hiện khi sáp nhập các khung dữ liệu:
ad <- data.frame(x=a, a=as.numeric(a))
bd <- data.frame(x=b, b=as.numeric(b))
merge(ad, bd)
## x a b
## 1 a 1 4
## 2 b 2 3
## 3 c 3 2
Những yếu tố đơn giản dường như bị cưỡng chế ký tự.
Có phải "hợp nhất an toàn" có sẵn ở đâu đó để thực hiện kiểm tra không? Bạn có thấy lý do cụ thể để không thực hiện kiểm tra này theo mặc định không?
Ví dụ (trường hợp sử dụng thực tế): Giả sử hai bộ dữ liệu không gian có phân số rất giống nhau nhưng không giống nhau ở các xã. Các bộ dữ liệu đề cập đến các điểm hơi khác nhau về thời gian và một số xã đã sáp nhập trong khoảng thời gian đó. Mỗi tập dữ liệu có một cột "ID xã", thậm chí có thể được đặt tên giống nhau. Trong khi ngữ nghĩa của cột này rất giống nhau, tôi không muốn (vô tình) hợp nhất các tập dữ liệu trên cột ID xã này. Thay vào đó, tôi xây dựng một bảng phù hợp giữa ID xã "cũ" và "mới". Nếu các ID xã được mã hóa dưới dạng các yếu tố, một "hợp nhất an toàn" sẽ cho phép kiểm tra tính chính xác cho hoạt động hợp nhất mà không tốn thêm chi phí (thực hiện) và chi phí tính toán rất ít.
IIUC, bạn muốn có lỗi trong trường hợp này vì các cấp không khớp? – Arun
@Arun: Trong nhiều trường hợp sử dụng, tôi thích lỗi hơn hoặc ít nhất là cảnh báo. – krlmlr
Tôi hiểu. Ngoài sự tò mò, bạn nghĩ điều này không an toàn theo cách nào? – Arun