Tôi tiếp tục chạy vào điều này và tự hỏi liệu có một công việc dễ dàng hay không. Đối với một số trường hợp tôi thấy nó hợp lý hơn để suy nghĩ về Subsetting một ma trận trongĐặt một data.frame với ma trận số nguyên
N <- 12
N.NA <- 6
dat <- data.frame(V1=runif(N),V2=runif(N))
sel.mat <- matrix(c(sample(seq(N),N.NA),sample(ncol(dat),N.NA,replace=TRUE)),ncol=2)
này hoạt động để lựa chọn, nhưng không phải để thay thế:
> dat[sel.mat]
[1] 0.2582569 0.8455966 0.8828083 0.5384263 0.9574810 0.5623158
> dat[sel.mat] <- NA
Error in `[<-.data.frame`(`*tmp*`, sel.mat, value = NA) :
only logical matrix subscripts are allowed in replacement
Tôi nhận ra rằng có một lý do cho thông báo lỗi (nó sẽ không biết phải làm gì nếu bạn có nhiều thay thế trỏ đến cùng một phần tử), nhưng điều đó không ngăn R cho phép thay thế số nguyên trên vectơ (ví dụ: dat$V1[c(2,3)] <- NA
).
Có cách nào thuận tiện để cho phép thay thế bằng ma trận nguyên không?
Trong ảnh chụp R-devel hiện tại, 'dat [sel.mat] <- na' ** được ** được hỗ trợ. Thay vào đó, việc lập chỉ mục ma trận với thay thế sẽ có sẵn từ R-3.0.0. (Xem câu trả lời của tôi bên dưới để biết thêm chi tiết.) –