Dado un objeto R, podemos requerir un análisis por separado para una o más partes de los datos contenidos en él. El proceso de obtención de estas partes de los datos de un objeto dado se llama subsetting
.
Valores faltantes:
Los valores faltantes ( NA
s) utilizados en la subcontratación con [
return NA
desde un índice de NA
elige un elemento desconocido y devuelve NA en el elemento correspondiente.
El tipo de NA
"predeterminado" es "lógico" ( typeof(NA)
), lo que significa que, como cualquier vector "lógico" utilizado en la subconjunto, se reciclará para que coincida con la longitud del objeto subcontratado. Entonces x[NA]
es equivalente a x[as.logical(NA)]
que es equivalente a x[rep_len(as.logical(NA), length(x))]
y, en consecuencia, devuelve un valor faltante ( NA
) para cada elemento de x
. Como ejemplo:
x <- 1:3
x[NA]
## [1] NA NA NA
Mientras se indexa con "numérico" / "entero", NA
elige un solo elemento de NA
(para cada NA
en el índice):
x[as.integer(NA)]
## [1] NA
x[c(NA, 1, NA, NA)]
## [1] NA 1 NA NA
Subconjunto fuera de límites:
El [
operador, con un argumento pasado, permite índices que son > length(x)
y devuelve NA
para vectores atómicos o NULL
para vectores genéricos. Por el contrario, con [[
y cuando [
se pasan más argumentos (es decir, subconjunto de objetos fuera de límites con length(dim(x)) > 2
) se devuelve un error:
(1:3)[10]
## [1] NA
(1:3)[[10]]
## Error in (1:3)[[10]] : subscript out of bounds
as.matrix(1:3)[10]
## [1] NA
as.matrix(1:3)[, 10]
## Error in as.matrix(1:3)[, 10] : subscript out of bounds
list(1, 2, 3)[10]
## [[1]]
## NULL
list(1, 2, 3)[[10]]
## Error in list(1, 2, 3)[[10]] : subscript out of bounds
El comportamiento es el mismo cuando se subcontrata con vectores de "caracteres", que no coinciden en el atributo "nombres" del objeto, también:
c(a = 1, b = 2)["c"]
## <NA>
## NA
list(a = 1, b = 2)["c"]
## <NA>
## NULL
Temas de ayuda:
Ver ?Extract
para más información.