Apa perbedaan utama antara tipe data vektor dan daftar di R? Apa keuntungan atau kerugian menggunakan (atau tidak) kedua tipe data ini?
Saya sangat menghargai melihat contoh yang mendemonstrasikan kasus penggunaan tipe data.
Secara teknis daftar adalah vektor, meskipun sangat sedikit yang akan menggunakan istilah itu. "list" adalah salah satu dari beberapa mode, dengan mode lainnya adalah "logical", "character", "numeric", "integer". Yang Anda sebut vektor adalah "vektor atom" dalam bahasa R ketat:
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
Daftar adalah jenis "rekursif" (dari vektor) sedangkan vektor atom bukan:
is.recursive(aaa) # TRUE
is.atomic(aaa) # FALSE
Anda memproses objek data dengan fungsi berbeda bergantung pada apakah objek tersebut rekursif, atom, atau memiliki atribut dimensi (matriks dan array). Namun, saya tidak yakin bahwa diskusi tentang "keuntungan dan kerugian" dari struktur data yang berbeda adalah pertanyaan yang cukup terfokus untuk SO. Untuk menambah apa yang dikatakan Tommy, selain list yang mampu menampung sembarang jumlah vektor lain, ada juga ketersediaan dataframe yang merupakan jenis list tertentu yang memiliki atribut dimensional yang mendefinisikan strukturnya. Tidak seperti matriks dan array yang benar-benar merupakan objek atom terlipat, dataframe dapat menampung berbagai jenis termasuk jenis faktor.
Ada juga peringatan bahwa is.vector
fungsi tersebut akan kembali FALSE
jika ada atribut selain nama. Lihat: apa itu vektor?
Daftar bersifat "rekursif". Ini berarti mereka dapat berisi nilai dari tipe yang berbeda, bahkan daftar lainnya:
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
Daftar digunakan di R untuk merepresentasikan kumpulan data: the data.frame
kelas pada dasarnya adalah daftar di mana setiap elemen adalah kolom dengan tipe tertentu.
Penggunaan lain adalah saat merepresentasikan model: hasil dari lm
mengembalikan daftar yang berisi sekumpulan objek berguna.
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)
Vektor atom (seperti non-list, tetapi numerik, logika dan karakter) berguna karena semua elemen diketahui memiliki tipe yang sama. Ini membuat manipulasi mereka sangat cepat.
Sebagai seseorang yang baru saja masuk ke R, tetapi berasal dari latar belakang C / Java / Ruby / PHP / Python, inilah pendapat saya tentang itu.
A list
sebenarnya adalah sebuah array + sebuah peta hash. Ini adalah array asosiatif PHP.
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
A vector
adalah larik / daftar tipe tetap. Anggap saja seperti daftar tertaut - karena memasukkan item yang berbeda ke dalam daftar tertaut adalah anti-pola. Ini adalah vektor dalam arti yang sama dengan unit SIMD / MMX / vektor menggunakan kata tersebut.
key
s dalam vektor dengan menggunakannames
metode ini.Pertanyaan pengantar ini dan yang serupa dijawab di http://www.burns-stat.com/pages/Tutor/hints_R_begin.html
Ini dimaksudkan sebagai pengantar lembut yang membuat Anda siap dan bekerja dengan R secepat mungkin. Untuk beberapa hal itu berhasil.
--- Edit: -
Upaya untuk menjelaskan lebih lanjut; dikutip dari referensi di atas.
Silakan juga merujuk ke tautan ini .
sumber
daftar termasuk beberapa tipe data seperti karakter, numerik, logika et. tetapi vektor hanya berisi jenis data yang serupa. misalnya:
untuk daftar:
yang artinya list berisi banyak tipe data seperti numeric, character dan logical di mylist. Namun pada vector akan terdapat single type data dari semua elemen dalam vector tersebut.
misalnya:
untuk vektor:
sumber