2013-10-21 35 views
16

Nesne bir vektör, yani logical, numeric, complex veya character modları nasıl test edilir? is.vector sorun aynı zamanda listeleri ve belki diğer türleri için TRUE döndürür olmasıdır:Nesne bir vektör olup olmadığını test etme

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

Ben ilkel türlerinden bir vektör olup olmadığını bilmek istiyorum. Bunun için yerel bir yöntem var mı, yoksa depolama moduna mı geçmem gerekiyor?

cevap

20

Yalnızca ilkel işlevler vardır, bu yüzden vektörün atomik türlerden biri olup olmadığını öğrenmek istediğinizi varsayalım. Nesnenin atomik olup olmadığını öğrenmek isterseniz, is.atomic'u kullanın. Belki

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

ve belki '! atomiklik için? –

+0

Bu faktör değişkenleri hariç, "%" in% "sayısal" olduğu kabul edilir, çünkü modları "tamsayı" dır. SimonO101'in testine ihtiyaç var. –

+1

"gotcha" hakkında, aynı (NULL, pairlist()) ' – Jeroen

4

değil Optimum, ama iş görür: Eğer söz atom tiplerinin alt kümesinde sadece ilgileniyorsanız

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 

, açıkça onlar için test etmek daha iyi olurdu iş: değişkenin bir vektör olup olmadığını ve bir liste değilse kontrol edin. Daha sonra is.vector sonucunu atlayın:

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

olduğuna dikkat edin. Bu, bir vektörler listesiyle çalışmaz:' is.list (c (liste(), liste())) 'döndürür TRUE. – Jason

+1

Bu numara, R'nin is.vector işlevinin her iki vektör ve liste için her zaman TRUE değerini döndürmesine yardımcı olur. İki soru sormalısınız, bu bir vektör, ve bir liste DEĞİLDİR. Bu hatalar düzeltildiğinde, R'nin gelecekteki sürümlerinde bu davranış değişebilir. –

İlgili konular