2013-10-21 21 views
16

Come verificare se un oggetto è un vettore, ovvero la modalità logical, numeric, complex o character? Il problema con is.vector è che restituisce anche TRUE per liste e forse altri tipi:Come verificare se l'oggetto è un vettore

> is.vector(list()) 
[1] TRUE 

voglio sapere se si tratta di un vettore di tipi primitivi. C'è un metodo nativo per questo, o devo andare in modalità di archiviazione?

risposta

20

Esistono solo funzioni primitive, quindi presumo che vogliate sapere se il vettore è uno dei tipi atomici. Se vuoi sapere se un oggetto è atomico, usa is.atomic.

is.atomic(logical()) 
is.atomic(integer()) 
is.atomic(numeric()) 
is.atomic(complex()) 
is.atomic(character()) 
is.atomic(raw()) 
is.atomic(NULL) 
is.atomic(list())  # is.vector==TRUE 
is.atomic(expression()) # is.vector==TRUE 
is.atomic(pairlist()) # potential "gotcha": pairlist() returns NULL 
is.atomic(pairlist(1)) # is.vector==FALSE 

Se siete interessati solo nel sottoinsieme dei tipi atomici che voi dite, sarebbe meglio provare per loro esplicitamente:

mode(foo) %in% c("logical","numeric","complex","character") 
+0

e forse '! is.recursive (list()) 'per atomicità? –

+0

Tranne che le variabili fattore saranno considerate come '% in%" numerico "' poiché la loro modalità è "intero". Il test di SimonO101 è necessario. –

+1

Riguardo al "gotcha", si noti che 'identico (NULL, pairlist())' – Jeroen

4
non

Forse l'ottimale, ma lo farà il lavoro: controlla se la variabile è un vettore E se non è una lista. Quindi ignorerai il risultato is.vector:

if(is.vector(someVector) & !is.list(someVector)) { 
    do something with the vector 
} 
+1

Questo non funziona con un vettore di liste: 'is.list (c (list(), list())) restituisce' TRUE. – Jason

+1

Questo trucco consente di aggirare il fatto che la funzione is.vector di R restituisce sempre TRUE sia per i vettori che per l'elenco. Devi fare due domande, che è un vettore e che NON è una lista. Sebbene questo comportamento possa cambiare nelle versioni future di R quando questi bug vengono corretti. –

Problemi correlati