Il codice è come questoPerché x [NA] produce un vettore NA della stessa lunghezza di x?
x <- 1:5
x[NA]
Perché si produce 5 NAS?
Il codice è come questoPerché x [NA] produce un vettore NA della stessa lunghezza di x?
x <- 1:5
x[NA]
Perché si produce 5 NAS?
La risposta a questa domanda ha due facce:
Come viene interpretato NA per l'indicizzazione matrici?
In one of the links fornito da @alexis_laz, ho trovato una spiegazione molto ben strutturata di come TRUE
, FALSE
e NA
vengono interpretati durante l'indicizzazione matrici:
Logical
indici indicanoR
quali elementi da includere o escludere.Sono disponibili tre opzioni:
TRUE
,FALSE
eNA
Servono a indicare se l'indice rappresentato in quella posizione dovrebbe essere inclusa. In altre parole:
TRUE == "Include the elment at this index" FALSE == "Do not include the element at this index" NA == "Return NA instead of this index" # loosely speaking
Ad esempio:
x <- 1:6 x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)] # [1] 1 3 NA 5
Un dettaglio importante è che la modalità di memorizzazione predefinito per un valore NA
isolata è logico (provate typeof(NA)
). È possibile scegliere la modalità di archiviazione di NA
utilizzando NA_integer_
, NA_real_
(per doppio), NA_complex_
o NA_character_
.
Perché 5 NA
e non solo 1?
Quando la lunghezza degli indici è minore della lunghezza del vettore x
, l'indicizzazione inizierà verso anche indice i valori in x
che non sono stati ancora indicizzati. In altre parole, R
"ricicla" automaticamente gli indici:
(...) Tuttavia, si applicano le regole di riciclaggio standard. Così, nell'esempio precedente, se togliamo l'ultimo
FALSE
, il vettore indice viene riciclato, il primo elemento dell'indice èTRUE
, e quindi l'elemento 6x
è ora inclusox <- 1:6 x[c(TRUE, FALSE, TRUE, NA, TRUE)] # [1] 1 3 NA 5 6
richiamo dettaglio sulla modalità di archiviazione dalla sezione precedente. Se digiti x[NA_integer_]
, troverai un risultato diverso.
Quali nuove informazioni aggiunge alla risposta nel secondo link fornite da alexis_laz? – Jaap
Non aggiunge alcuna informazione. La domanda era in attesa di una risposta e ho messo insieme le informazioni fornite nei commenti –
Buona domanda. Cerca di risponderti vedendo cosa restituiscono 'x [TRUE]', 'x [FALSE]', 'class (NA)' e 'x [NA_integer_]'. – nicola
'x [c (NA, TRUE)]' potrebbe anche essere illuminante, in quanto mostra esplicitamente il vettore che ricicla sia un valore 'NA' che non-'NA'. – thelatemail
Vedi post simili [qui] (http://stackoverflow.com/questions/23406124/na-in-subsetter-inconsistent-behavior) e [qui] (http://stackoverflow.com/questions/16418689/how-is -true-interpreted-when-used-as-matrix-index) –