2016-05-25 18 views
2

私はRが初めてのため、適用関数が新しくなっています。私はそれを解決する(それほどエレガントではない)方法を持っていても、私はどこでもこの質問に対する答えを見つけていない。mapplyで反復する引数を指定する方法R

は、このダミーのコードを考えてみましょう:

my.fun <- function(vector1, vector2, vector3 = NULL) { 
    # do stuff with the vectors 
} 

list1 <- mapply(FUN = my.fun, arg1, arg2, list(arg3), SIMPLIFY = FALSE) 

と仮定ARG1とARG2は私がmapply関数内反復処理したい(同じ長さの)リストですが、私が使用したいのベクターは単にARG3ですmy.fun()は反復されません。私の質問は、どのように私はすべてのmapply関数の反復でmy.fun()でarg3を使用可能にするのですか?明確にするために、my.fun()内のvector3は、my.fun()の外側でarg3と等しくなければなりません。

list1 <- mapply(FUN = my.fun, arg1, arg2, rep(list(arg3), length(arg1)), SIMPLIFY = FALSE) 

しかし、よりエレガントな方法があるはずのように見えます。これを行うの

一つの方法です。

どの引数が反復され、どの引数が反復されるかを指定する方法はありますか?同じことをたくさん作成しなくても、同じことを(家族適用機能を使って)やっていますか?

ありがとうございました。

答えて

2

mapply()あるだけで、この目的のために意図MoreArgs=引数を持っています。例えば

par(mfcol=c(2,2), ann=FALSE, mar=c(1,1,1,1)) 
mapply(plot, x=1:4, y=4:1, col=1:4, 
     MoreArgs=list(xlim=c(1,4), ylim=c(1,4), pch=16, cex=3)) 

enter image description here

+0

それはまさにこれです。ありがとうございました – jose

0

これを行う1つの方法は、Map関数を匿名関数とともに使用することです。ここでは例が

myFunction <- function(arg1, arg2, arg3) { 
    arg1 + arg2 + arg3 
} 

arg1 <- 1:5 
arg2 <- 5:1 
arg3 <- 1 

Map(function(arg1, arg2) myFunction(arg1, arg2, arg3=arg3), arg1, arg2) 
関連する問題