2016-05-25 4 views
2

iteriert werden Ich bin neu in R, daher bin ich neu bei den Funktionen anwenden. Ich habe die Antwort auf diese Frage nirgendwo gefunden, obwohl ich eine (nicht so elegante) Lösung habe.Wie zu spezifizieren, welche Argumente in Mapply in R

dieses Blindkode Bedenken Sie:

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

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

Angenommen arg1 und arg2 sind Listen (die gleiche Länge), die ich in der mapply Funktion zu durchlaufen wollen, aber arg3 ist einfach ein Vektor, ich möchte verwenden, my.fun() ohne iteriert zu werden. Meine Frage ist: Wie stelle ich arg3 in my.fun() in allen mapply Funktionsiterationen zur Verfügung? Um zu verdeutlichen, sollte der Vektor3 in my.fun() gleich arg3 außerhalb von my.fun() sein.

Eine Möglichkeit, dies zu tun, ist:

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

Aber es sieht aus wie es sollte ein eleganter Weg sein.

Gibt es eine Möglichkeit zu spezifizieren, welche Argumente iteriert werden und welche nicht? Oder dasselbe tun (mit einer Apply-Family-Funktion), ohne viele Kopien derselben Sache erstellen zu müssen?

Vielen Dank für einen Hinweis.

Antwort

2

mapply() hat ein MoreArgs= Argument nur für diesen Zweck bestimmt ist.

Zum Beispiel:

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

Es ist genau dieses. Vielen Dank – jose

0

Eine Möglichkeit, dies zu tun, ist die Verwendung der Map Funktion zusammen mit einer anonymen Funktion. Hier ist ein Beispiel

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) 
Verwandte Themen