R'deki vektör ve liste veri türleri arasındaki farklar nelerdir?


127

R'deki vektör ve liste veri türleri arasındaki temel farklar nelerdir? Bu iki veri türünü kullanmanın (veya kullanmamanın) avantajları veya dezavantajları nelerdir?

Veri türlerinin kullanım durumlarını gösteren örnekleri görmek isterim.

Yanıtlar:


77

Teknik olarak listeleri vardır çok az bu terimi kullanmak istiyorsunuz rağmen, vektörler. "liste", diğerleri "mantıksal", "karakter", "sayısal", "tam sayı" olmakla birlikte, birkaç moddan biridir. Vektörler olarak adlandırdığınız şey, katı R tabiriyle "atomik vektörler" dir:

 aaa <- vector("list", 3)
 is.list(aaa)   #TRUE
 is.vector(aaa)  #TRUE

Listeler "özyinelemeli" bir tür (vektör) iken atomik vektörler:

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE

Veri nesnelerini özyinelemeli, atomik veya boyutsal niteliklere (matrisler ve diziler) sahip olmalarına bağlı olarak farklı işlevlerle işlersiniz. Ancak, farklı veri yapılarının "avantajları ve dezavantajları" ile ilgili bir tartışmanın SO için yeterince odaklanmış bir soru olduğundan emin değilim. Tommy'nin söylediğine ek olarak, listelerin rastgele sayıda başka vektörü tutabilmesinin yanı sıra, yapısını tanımlayan boyutsal bir niteliğe sahip belirli bir liste türü olan veri çerçevelerinin mevcudiyeti de vardır. Gerçekten katlanmış atomik nesneler olan matrisler ve dizilerden farklı olarak, veri çerçeveleri faktör türleri dahil olmak üzere çeşitli türleri tutabilir.

İsimlerden başka özellikler olduğunda is.vectorfonksiyonun geri döneceğine dair uyarı da FALSEvar. Bakınız: vektör nedir?


54

Listeler "yinelemeli" dir. Bu, farklı türlerde değerler, hatta başka listeler içerebilecekleri anlamına gelir:

x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13))
x # print the list
x$values   # Get one element
x[["ids"]] # Another way to get an element
x$sub$foo  # Get sub elements
x[[c(3,2)]]  # Another way (gets 13)
str(x)     # A "summary" of the list's content

Listeler, R'de veri kümelerini temsil etmek için kullanılır: data.framesınıf, esasen her öğenin belirli bir türden bir sütun olduğu bir listedir.

Başka bir kullanım, bir modeli temsil ederken kullanılır: sonuç lm, bir grup yararlı nesne içeren bir liste döndürür.

d <- data.frame(a=11:13, b=21:23)
is.list(d) # TRUE
str(d)

m <- lm(a ~ b, data=d)
is.list(m) # TRUE
str(m)

Atomik vektörler (liste dışı, ancak sayısal, mantıksal ve karakter) kullanışlıdır çünkü tüm elementlerin aynı türe sahip olduğu bilinmektedir. Bu, onları çok hızlı manipüle etmeyi sağlar.


20

R'ye yeni girmiş, ancak C / Java / Ruby / PHP / Python arka planından gelen biri olarak, işte böyle düşünüyorum.

A listgerçekten bir dizi + bir karma haritadır. Bu bir PHP ilişkisel dizisidir.

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'

A vector, sabit tip bir dizi / listedir. Bağlantılı bir liste gibi düşünün - çünkü birbirine benzemeyen öğeleri bağlantılı bir listeye koymak zaten bir kalıp karşıtıdır. SIMD / MMX / vektör birimlerinin kelimeyi kullandığı aynı anlamda bir vektördür.


3
Yöntemi keykullanarak vektörlerde s'ye sahip olabilirsiniz names.
gokul_uf

9

Bu ve benzeri giriş soruları http://www.burns-stat.com/pages/Tutor/hints_R_begin.html adresinde yanıtlanmıştır.

Sizi olabildiğince hızlı bir şekilde R ile çalışmaya hazırlayan nazik bir giriş olması amaçlanmıştır. Bir dereceye kadar başarılı oluyor.

--- Düzenle: --

Daha fazla açıklama girişimi; yukarıdaki referanstan alıntılanmıştır.

Atomik vektör

Muhtemelen karşılaşacağınız üç çeşit atomik vektör vardır:

  • “Sayısal”
  • "mantıklı"
  • "karakter"

Atom vektörleri hakkında hatırlanması gereken şey, içlerindeki tüm elementlerin yalnızca tek tipte olmasıdır.

Liste

Listelerin farklı bileşenlerde farklı türde öğeleri olabilir. Bir listenin bir bileşeninin başka bir liste, bir atom vektörü (ve diğer şeyler) olmasına izin verilir.

Lütfen bu bağlantıya da bakın .


2
Olumsuz oy verildi: En azından bizi o web sitesinin orijinal soruyu cevaplayan belirli bir bölümüne yönlendirmelisiniz.
nbro

2

liste, karakter, sayısal, mantıksal vb. gibi birden çok veri türünü içerir. ancak vektör yalnızca benzer türde veriler içerir. örneğin:

scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)

liste için:

mylist <- list(scores,student,sc_log)
# search for class of mylist vector 
#check structure of mylist using str() function.
str(mylist)
[1] list of 3
[1] $:num [1:4] 20 30 40 50
[2] $:chr [1:4] "A""B""C""D"
[3] $:log [1:4] TRUE FALSE FALSE TRUE

bu, mylist'te sayısal, karakter ve mantıksal gibi birden çok veri türü içeren bir liste anlamına gelir, ancak vektörde, o vektördeki tüm öğelerin tek veri türü olacaktır.

örneğin:

vektör için:

vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"

#which means all elements of vector containing single data type that is numeric only.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.