Ciągle w to wchodzę i zastanawiam się, czy nie ma łatwego obejścia. W niektórych sytuacjach, uważam, że bardziej logiczne, aby myśleć o podzbiorów matrycę wPodział elementu data.frame na macierz całkowitą
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)
Działa to do wyboru, ale nie do zastąpienia:
> 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
Zdaję sobie sprawę, że istnieje powód, dla komunikatu o błędzie (nie wiedziałby, co zrobić, gdybyś miał wiele zamienników wskazujących na ten sam element), ale to nie powstrzyma R przed dopuszczeniem zastępowania liczb całkowitych wektorami (np. dat$V1[c(2,3)] <- NA
).
Czy istnieje wygodny sposób na zastąpienie przez macierz całkowitą?
W obecnym R woju zrzutu 'DAT [sel.mat] <- NA' ** ** jest obsługiwany. Indeksowanie macierzy z zamiennikiem będzie dostępne w wersji R-3.0.0. (Zobacz moją odpowiedź poniżej po więcej szczegółów.) –