Я продолжаю сталкиваться с этим, и мне интересно, есть ли там легкая работа. В некоторых ситуациях я считаю логичнее думать о подмножестве матрицы в
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)
Это работает для выбора, но не для замены:
> 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
Я понимаю, что есть причина для сообщения об ошибке (он не знал, что делать, если у вас было несколько заметок, указывающих на один и тот же элемент), но это не останавливает R от возможности целочисленной замены на векторах (например, dat$V1[c(2,3)] <- NA
).
Есть ли удобный способ разрешить замену целой матрицей?