Saya punya daftar dan saya ingin menghapus satu elemen dari itu. Bagaimana saya bisa melakukan ini?
Saya sudah mencoba mencari apa yang saya pikir nama yang jelas untuk fungsi ini akan ada di manual referensi dan saya belum menemukan sesuatu yang sesuai.
Jawaban:
Saya tidak tahu R sama sekali, tetapi sedikit googling kreatif membawa saya ke sini: http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html
Kutipan kunci dari sana:
Sebuah respon yang posting kemudian di thread negara:
Dan bagian yang relevan dari FAQ R mengatakan:
Yang sepertinya memberi tahu Anda (dengan cara yang agak mundur) cara menghapus elemen.
Harapan yang membantu, atau paling tidak menuntun Anda ke arah yang benar.
sumber
Error in list[length(list)] <- NULL : replacement has length zero
Jika Anda tidak ingin mengubah daftar di tempat (misalnya untuk meneruskan daftar dengan elemen yang dihapus ke fungsi), Anda dapat menggunakan pengindeksan: indeks negatif berarti "jangan sertakan elemen ini".
Juga, vektor indeks logis berguna:
Ini juga berfungsi dengan kerangka data:
sumber
x$b
cara itu, Anda juga tidak dapat menghapus "b" dari elemen daftarx[[2]] = c("b","k")
.%in%
untuk menguji beberapa item. Saya tidak yakin apa yang Anda maksud dengan “tidak dapat menghapus x $ b” - maksud Anda menghapus seluruh kolomb
?Berikut ini cara menghapus elemen terakhir dari daftar di R:
Jika x mungkin menjadi vektor maka Anda perlu membuat objek baru:
sumber
Menghapus elemen Null dari daftar dalam satu baris:
x=x[-(which(sapply(x,is.null),arr.ind=TRUE))]
Bersulang
sumber
x
daftar kosong. Gunakancompact
dariplyr
untuk tugas ini sebagai gantinya.-(which(sapply(x,is.null),arr.ind=TRUE))
mengembalikannamed integer(0)
yang akan menjatuhkan baris itu seluruhnya.Saya ingin menambahkan bahwa jika itu adalah daftar nama yang dapat Anda gunakan
within
.Jadi, Anda dapat menimpa daftar asli
untuk menghapus elemen bernama
a
dari daftarl
.sumber
within(l, rm(a, b))
Jika Anda memiliki daftar bernama dan ingin menghapus elemen tertentu, Anda dapat mencoba:
Ini akan membuat daftar
lst
dengan unsur-unsura
,b
,c
. Baris kedua menghapus elemenb
setelah memeriksa apakah ada (untuk menghindari masalah @hjv yang disebutkan).atau lebih baik:
Dengan cara ini, bukan masalah untuk mencoba menghapus elemen yang tidak ada (mis.
lst$g <- NULL
)sumber
Ada paket rlist ( http://cran.r-project.org/web/packages/rlist/index.html ) untuk menangani berbagai jenis operasi daftar.
Contoh ( http://cran.r-project.org/web/packages/rlist/vignettes/Filtering.html ):
Hasil dalam:
sumber
Tidak tahu apakah Anda masih membutuhkan jawaban untuk ini, tetapi saya menemukan dari pengalaman R-mengajar 3 minggu saya yang terbatas dengan R itu, menggunakan
NULL
tugas sebenarnya salah atau kurang optimal terutama jika Anda memperbarui secara dinamis daftar dalam sesuatu seperti for-loop.Untuk lebih tepatnya, gunakan
akan melempar kesalahan
atau
Apa yang saya temukan untuk bekerja lebih konsisten adalah
sumber
[[-5]]
harus kurung kotak tunggal, jika tidak, Anda hanya membatalkan pilihan elemen daftar itu, bukan elemen itu sendiri. Yah, setidaknya menggunakan tanda kurung ganda memberi saya kesalahan ini: "upaya untuk memilih lebih dari satu elemen". Karya apa yang bagi saya adalah maka:myList <- myList[-5]
.Hanya ingin menambahkan dengan cepat (karena saya tidak melihatnya di salah satu jawaban) yang, untuk daftar nama, Anda juga dapat melakukannya
l["name"] <- NULL
. Sebagai contoh:sumber
Gunakan
-
(tanda Negatif) bersama dengan posisi elemen, misalnya jika elemen ke-3 harus dihapus gunakan sebagaiyour_list[-3]
Memasukkan
Hapus satu elemen dari daftar
Hapus beberapa elemen dari daftar
sumber
Dalam kasus daftar bernama saya menemukan fungsi pembantu itu berguna
sumber
Menggunakan lapply dan grep:
sumber
Bagaimana dengan ini? Sekali lagi, menggunakan indeks
atau
sumber
m[1:(length(m) - 1)]
jika Anda ingin menghindari indeks numerik, Anda dapat menggunakan
untuk menghapus nama
namea...namen
dari a. ini berfungsi untuk daftarserta untuk vektor
sumber
Anda bisa menggunakannya
which
.sumber
list