lapplyのFUNにいくつかの引数を渡します(他の* apply)


99

で使用lapplyする場合、関数に複数の引数を渡すことについて質問がありRます。

の構文でlapplyを使用すると、lapply(input, myfun);これは簡単に理解でき、myfunを次のように定義できます。

myfun <- function(x) {
 # doing something here with x
}

lapply(input, myfun);

およびの要素はinputx引数としてに渡されますmyfun

しかし、さらに引数を渡す必要がある場合はどうなりmyfuncますか?たとえば、次のように定義されています。

myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

inputx引数として)要素と他の引数の両方を渡してこの関数を使用するにはどうすればよいですか?


Rコンソール入力行を「;」で終了する おそらく過去に何らかのマクロ処理言語を使用した兆候です。トリプルドット引数については、「R入門」ドキュメントの「独自の関数の記述」セクションのサブセクション4で説明されています。おそらく、最初に読む必要がある「マニュアル」です。
IRTFM 2013年

回答:


120

ヘルプページを調べると、の引数の1つはlapply不思議...です。ヘルプページの引数セクションを見ると、次の行が見つかります。

...: optional arguments to ‘FUN’.

したがって、次のように、lapply呼び出しに他の引数を引数として含めるだけです。

lapply(input, myfun, arg1=6)

そしてlapplyarg1それが何をすべきかを知っている議論ではないことを認識すると、自動的にそれが渡されmyfunます。他のすべてのapply関数は同じことを行うことができます。

補遺:...独自の関数を書くときにも使用できます。たとえばplot、ある時点で呼び出す関数を記述し、その関数呼び出しからプロットパラメーターを変更できるようにしたいとします。各パラメーターを関数の引数として含めることもできますが、それは面倒です。代わりに...(関数とその中のplotへの呼び出しの両方の引数として)を使用し、関数が認識しない引数を自動的にに渡すことができますplot


「arg1」などの2番目の引数が「入力」リストと一致するリストである場合はどうなりますか?input2がリストであるlapply(input、myfun、arg1 = input2)を試すと、lapplyは 'input'のように要素ごとではなく、リスト全体を一度に渡すように見えます。
アラン

10
機能する別の投稿で答えを見つけました:mapply(myfun、df $ input、df $ input2)
Alan

18

アランによって提案されたように、関数 'mapply'は関数を複数の複数のリストまたはベクトル引数に適用します。

mapply(myfun, arg1, arg2)

manページを参照してください:https : //stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html


outer同じように、2つのベクトル引数の値の各ペアに関数を適用することにも言及する価値があります。マンページ:stat.ethz.ch/R-manual/R-devel/library/base/html/outer.html
ms609

11

次の方法で行うことができます。

 myfxn <- function(var1,var2,var3){
      var1*var2*var3

    }

    lapply(1:3,myfxn,var2=2,var3=100)

そしてあなたは答えを得るでしょう:

[[1]] [1] 200

[[2]] [1] 400

[[3]] [1] 600


3
myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

xベクトルまたはリストでありmyfun、in lapply(x, myfun)は各要素ごとにx個別に呼び出されます。

オプション1

あなたは全体の使用したい場合はarg1、それぞれにmyfunコール(myfun(x[1], arg1)myfun(x[2], arg1)など)、使用lapply(x, myfun, arg1)(上記のように)。

オプション2

もしあなたがしたいしかし、呼びたいmyfunの各要素へarg1の要素と一緒に、別々にxmyfun(x[1], arg1[1])myfun(x[2], arg1[2])など)、それを使用することはできませんlapply。代わりに、mapply(myfun, x, arg1)(上記のように)またはapply

 apply(cbind(x,arg1), 1, myfun)

または

 apply(rbind(x,arg1), 2, myfun).
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.