Saya mencoba belajar R dan saya tidak tahu cara menambahkan ke daftar.
Jika ini Python, saya akan melakukannya. . .
#Python
vector = []
values = ['a','b','c','d','e','f','g']
for i in range(0,len(values)):
vector.append(values[i])
Bagaimana Anda melakukan ini dalam R?
#R Programming
> vector = c()
> values = c('a','b','c','d','e','f','g')
> for (i in 1:length(values))
+ #append value[i] to empty vector
vector = values
; atau Anda bisa melakukan nilai vektor = vektor +. Tapi saya mungkin salah paham dengan use case AndaJawaban:
Menambahkan ke objek dalam loop untuk menyebabkan seluruh objek akan disalin pada setiap iterasi, yang menyebabkan banyak orang mengatakan "R lambat", atau "Loop harus dihindari".
Seperti yang BrodieG sebutkan dalam komentar: jauh lebih baik untuk pra-alokasikan vektor dengan panjang yang diinginkan, kemudian atur nilai elemen dalam loop.
Berikut adalah beberapa cara untuk menambahkan nilai ke vektor. Mereka semua berkecil hati.
Menambahkan ke vektor dalam satu lingkaran
help("append")
akan menjawab pertanyaan Anda dan menghemat waktu yang Anda butuhkan untuk menulis pertanyaan ini (tetapi akan menyebabkan Anda mengembangkan kebiasaan buruk). ;-)Perhatikan bahwa
vector <- c()
itu bukan vektor kosong; ituNULL
. Jika Anda ingin vektor karakter kosong, gunakanvector <- character()
.Pra-alokasikan vektor sebelum pengulangan
Jika Anda benar-benar harus menggunakan for loop, Anda harus mengalokasikan seluruh vektor sebelum loop. Ini akan jauh lebih cepat daripada menambahkan untuk vektor yang lebih besar.
sumber
vector <- character(length(values)); for(...
)?FWIW: analog dengan python menambahkan ():
sumber
b <- 1; b <- append(b, 2)
. Tetapi seperti yang Anda sebutkan, c () adalah cara yang lebih R dalam melakukan sesuatu.Anda punya beberapa pilihan:
c(vector, values)
append(vector, values)
vector[(length(vector) + 1):(length(vector) + length(values))] <- values
Yang pertama adalah pendekatan standar. Yang kedua memberi Anda pilihan untuk menambahkan tempat selain akhir. Yang terakhir agak berkerut tetapi memiliki keuntungan memodifikasi
vector
(meskipun sebenarnya, Anda bisa dengan mudah melakukannyavector <- c(vector, values)
.Perhatikan bahwa dalam R Anda tidak perlu menggilir vektor. Anda bisa mengoperasikannya secara keseluruhan.
Juga, ini adalah hal yang cukup mendasar, jadi Anda harus membaca beberapa referensi .
Beberapa opsi lain berdasarkan umpan balik OP:
sumber
c
untuk append dataframe bukan vektor?Hanya demi kelengkapan, menambahkan nilai ke vektor dalam for for tidak benar-benar filosofi dalam R. R bekerja lebih baik dengan beroperasi pada vektor secara keseluruhan, seperti yang ditunjukkan oleh @BrodieG. Lihat apakah kode Anda tidak dapat ditulis ulang sebagai:
Output akan menjadi vektor nilai pengembalian. Anda juga dapat menggunakan
lapply
jika nilai adalah daftar, bukan vektor.sumber
Terkadang kita harus menggunakan loop, misalnya, ketika kita tidak tahu berapa banyak iterasi yang kita butuhkan untuk mendapatkan hasilnya. Ambil while loop sebagai contoh. Berikut adalah metode yang harus Anda hindari:
Ini sangat tidak efisien karena R menyalin vektor setiap kali ditambahkan.
Cara paling efisien untuk menambahkan adalah dengan menggunakan indeks. Perhatikan bahwa saat ini saya membiarkannya mengulangi 1e7 kali, tetapi masih jauh lebih cepat daripada
c
.Ini bisa diterima. Dan kita bisa membuatnya sedikit lebih cepat dengan mengganti
[
dengan[[
.Mungkin Anda sudah memperhatikan bahwa itu
length
bisa memakan waktu. Jika kami gantilength
dengan penghitung:Seperti yang disebutkan pengguna lain, pra-alokasi vektor sangat membantu. Tapi ini adalah trade-off antara kecepatan dan penggunaan memori jika Anda tidak tahu berapa banyak loop yang Anda butuhkan untuk mendapatkan hasilnya.
Metode perantara adalah secara bertahap menambahkan blok hasil.
sumber
Di R, Anda dapat mencoba cara ini:
sumber
sumber
Apa yang Anda gunakan dalam kode python disebut daftar dalam python, dan ini tottaly berbeda dari vektor R, jika saya mendapatkan apa yang ingin Anda lakukan:
sumber