2013-10-09 7 views
18

Rの中で関数lapplyが行列のリストに存在する行列から要素を抽出するのを見てきました。lapplyの関数として角括弧を使用するR

など。私は3(2x2)行列のリストを持っており、これらの3つの行列のそれぞれから要素[1,2]を抽出したいと思います。

コード:list1 = lapply(mylist, '[', 1,2)はうまくいきます。これら3つの要素を持つリストを返します。

私はこれが正確に何をしているのかを調べようとしています。 Googleが手助けしていないし、?'['をRのヘルプに使用することはそれほど説明的ではありません。私は'['がどのようにRの関数であるかわからないので、コードは直感的ではありません。

+0

のインデックスです。関連項目:http://stackoverflow.com/questions/10449366/levels-what-sorcery-is-this –

+3

他の人が指摘しているように、 '['は間違いなく関数です。また、多くのバリエーションを '<-'に使用すると、そのリンクに@AriB.Friedmanの注釈として示す代入関数(' [< - ')などがあります。たとえば、次の2つのコマンドを試してください: 'x < - 1:5; "[< - "(x、1,10); ' – thelatemail

+3

** Rの中の**はすべてオブジェクトです...もし何かすれば、オブジェクトの型は関数になります。 – Gregor

答えて

19

Rの演算子は単なる関数です。

これらは同等です:

> x <- list(a=1,b=2) 
> x[1] 
$a 
[1] 1 

> `[`(x,1) 
$a 
[1] 1 

はバッククォートは(例えば、それは時期尚早[の解釈を開始していない関数名だ、それを伝えるために)パーサによって解釈を防ぐために必要です。

関数であるため、他のすべてと同じオブジェクト指向のルール(この場合はS3)に従います。

> methods(`[`) 
[1] [.acf*    [.arrow*   [.AsIs    [.bibentry*  [.cluster*   [.data.frame  [.data.table*  
[8] [.Date    [.difftime   [.envlist*   [.factor   [.formula*   [.fractions*  [.getAnywhere*  
[15] [.gList*   [.gpar*   [.gtable*   [.hexmode   [.idf*    [.indexed*   [.insensitive*  
[22] [.ITime*   [.listof   [.noquote   [.numeric_version [.octmode   [.pdf_doc*   [.person*   
[29] [.POSIXct   [.POSIXlt   [.quoted*   [.raster*   [.roman*   [.shingle*   [.simple.list  
[36] [.split*   [.terms*   [.trellis*   [.ts*    [.tskernel*  [.uneval*   [.unit*   
[43] [.unit.arithmetic* [.unit.list*  [.vpPath*   

    Non-visible functions are asterisked 

+=、などと他の事業者すべての作業だけでなく、このよう。

+2

良い説明 - '他の演算子'、 ''/"(1,2)'、 '1/2'と' do.call( "/"、list(1,2)) 'allの例を与える同じ結果を与える。 – thelatemail

+1

アスタリスク付き関数については、[関数のソースコードを表示するにはどうすればいいですか?](http://stackoverflow.com/a/19226817/1191259) – Frank

+2

@thelatemailベースでは、 'Reduce( '/'、list (1,2)) '、' Map( '/'、1,2) 'とすべての*' apply'sも引数として関数をとるでしょう。 – Frank

27

大括弧は実際には最初の引数がサブセット化されているオブジェクトである関数です。後続の引数はそのサブセットのインデックスです。これらのドットで表現

args(lapply) 
# function (X, FUN, ...) 

すべてが引数としての機能FUNに渡されます:今

# For example, if M is a matrix 
M[1, 2] # extracts the element at row 1, col 2 
# is the same as 
`[`(M, 1, 2) 
# Try them! 

は、 lapplyの引数を見てください。

FUN="["の場合、最初の引数"["は、リストの現在の要素(反復処理中)、つまりサブセット化されているオブジェクトです。その後の引数は"["