リストから複数の要素を選択します


82

私はRに約10,000要素の長さのリストを持っています。要素5、7、および9のみを選択したいとします。forループなしでそれを行う方法がわかりません。

のようなことをしたいのですが、うまくいきmylist[[c(5,7,9]]ません。私もこのlapply機能を試しましたが、それを機能させることもできませんでした。


17
ドキュメントからで発見?"[["間の最も重要な違い[[[及び$ということである[他の2つは、単一の要素を選択するのに対し、複数の要素を選択することができます。
A5C1D2H2I1M1N2O1R2T1 2012

@mrdwabのコメントに加えて、これはRのベクトル化された世界であり、「単一の要素」はベクトルである可能性があります。
seancarmody 2012

回答:


136

mylist[c(5,7,9)] それをする必要があります。

サブリストを結果リストのサブリストとして返す必要があります。そのために使用しない[[]](というより、関数は[[)-Dasonがコメントで言及しているように[[、要素を取得します。


8
さらに詳細を追加するだけです。「[」はサブリストを返すので、複数の入力を使用できるのは理にかなっています。"[["は実際には要素自体を取得するため、リストを返さないため(要素自体がリストでない限り)、単一の入力のみを受け取ることができます。
デイソン2012

これはベクトル化されていますか?私は2つのリストを持っています:b1000万の要素が含まれています。filter_bins各要素がインデックスであるリストです。したがってb、同じインデックスを持つ要素のみを取得するには lapply(filter_bins, function(x) b[x, ]) 、b [x、]が行のサブセットのみを返すようにします(各要素はfilter_binsによって選択されます)。これが理にかなっていることを願っています。私の質問は、これは非常に遅いということです
masfenix 2014年

@masfenixは、詳細を説明する新しい質問を生成する必要があります。
Glen_b 2014年

上記の解決策は、dplyr :: select()やcontains( 'some text ")のようなもので実行できますか?
2016

3
@HermanToothrotあなたはしません。少なくとも直接ではありません。抽出するインデックスを重ねたり、適用したりして、対応する要素を[[。で繰り返し取得できます。しかし、複数の要素を抽出したい場合は、実際にはサブリストを取得しているので、使用する必要があります[
Dason 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.