web-dev-qa-db-ja.com

lapply(およびその他* apply)のFUNにいくつかの引数を渡す

lapplyRを使用する場合、関数に複数の引数を渡すことに関して質問があります。

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

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

lapply(input, myfun);

inputの要素は、x引数としてmyfunに渡されます。

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

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

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

78
Vasily A

ヘルプページを検索すると、lapplyの引数の1つは不可解な...です。ヘルプページの[引数]セクションを見ると、次の行があります。

...: optional arguments to ‘FUN’.

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

lapply(input, myfun, arg1=6)

およびlapplyは、arg1が処理方法を知っている引数ではないことを認識して、自動的にmyfunに渡します。他のすべてのapply関数は同じことを行うことができます。

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

97

アランが示唆するように、関数 'mapply'は、複数の複数のリストまたはベクトル引数に関数を適用します。

mapply(myfun, arg1, arg2)

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

16
Andrew

次の方法で実行できます。

 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

7
Gpwner