Listeden birden çok öğe seçin


83

R'de 10.000 element uzunluğunda bir listem var. Diyelim ki sadece 5, 7 ve 9 elementlerini seçmek istiyorum. Bir for döngüsü olmadan bunu nasıl yapacağımdan emin değilim.

Böyle bir şey yapmak istiyorum mylist[[c(5,7,9]]ama bu işe yaramıyor. lapplyİşlevi de denedim ama onu da çalıştıramadım.


19
Belgelerine bulunan ?"[[": arasındaki en önemli fark [, [[ve $ki [, diğer ikisi tek bir öğeyi seçmek ise birden fazla eleman seçebilir.
A5C1D2H2I1M1N2O1R2T1

1
@ Mrdwab'ın yorumuna ek olarak, bu R'nin vektörleştirilmiş dünyasıdır, "tek bir eleman" bir vektör olabilir!
seancarmody

Yanıtlar:


139

mylist[c(5,7,9)] yapmalı.

Alt listelerin sonuç listesinin alt listeleri olarak döndürülmesini istiyorsunuz; bunun için kullanmazsınız [[]](daha doğrusu işlev [[) - Dason'un yorumlarda bahsettiği gibi [[, öğeyi yakalar.


8
Biraz daha ayrıntı eklemek için - "[" bir alt liste döndürecektir, böylece onunla birden çok giriş kullanabileceğiniz mantıklıdır. "[[" aslında öğeyi yakalar, böylece bir liste döndürmediği için yalnızca tek bir girdi alabilir (öğenin kendisi bir liste değilse).
Dason

Bu vektörleştirilmiş mi? İki listem var: b10 milyon öğe içeriyor. filter_binsher öğenin bir indeks olduğu bir listedir. bu nedenle, yalnızca baynı indekse sahip öğeleri almak için lapply(filter_bins, function(x) b[x, ]) b [x,] satırların yalnızca bir alt kümesini döndürür (burada her öğe filter_bins tarafından seçilir) .. Umarım bu mantıklıdır. Sorum şu ki, bu çok yavaş
masfenix

@masfenix ayrıntıları açıklayan yeni bir soru oluşturmalısınız.
Glen_b

Yukarıdaki çözüm dplyr :: select () gibi bir şeyle yapılabilir mi ve şunu içerir ('bir metin ")?
Derelict

3
@HermanToothrot Yapmıyorsun. En azından doğrudan değil. Ayıklamak istediğiniz endekslerin üzerine atlayabilir veya hafifçe uygulayabilir ve karşılık gelen öğeyi yinelemeli olarak yakalayabilirsiniz [[. Ancak birden fazla öğeyi çıkarmak istiyorsanız, o zaman gerçekten bir alt listeye giriyorsunuz ve sadece kullanmalısınız[
Dason
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.