Dear list and Hadley,
The new plyr package seems to provide a clean and consistent way to apply a
function on several arguments. However, I don't understand why the following
example does not work like the standard mapply,
library(plyr)
df <- data.frame(a=1:10 , b=1:10)
foo1 <- function(a, b, cc=0, d=0){
a + b + cc + d
}
mdply(df, foo1, cc=1) # fine
mdply(df, foo1, d=1) # fails
mdply(df, foo1, cc=1, d=2) # fails
mapply(foo1, a=df$a, b=df$b, MoreArgs=list(cc=1))
mapply(foo1, a=df$a, b=df$b, MoreArgs=list(d=1))
mapply(foo1, a=df$a, b=df$b, MoreArgs=list(cc=1, d=2))
Best regards,
baptiste
On Sun, Oct 5, 2008 at 8:02 AM, Auguie, Baptiste <ba208 at exeter.ac.uk> wrote:> Dear list and Hadley, > > The new plyr package seems to provide a clean and consistent way to apply a function on several arguments. However, I don't understand why the following example does not work like the standard mapply, > > library(plyr) > df <- data.frame(a=1:10 , b=1:10) > > foo1 <- function(a, b, cc=0, d=0){ > a + b + cc + d > } > > mdply(df, foo1, cc=1) # fine > > mdply(df, foo1, d=1) # fails > mdply(df, foo1, cc=1, d=2) # failsUnfortunately this bug is R's partial name matching: d = 2 -> data. 2. You should be able to fix this by manually specifying mdply(data. = df, foo1, cc=1, d=2) but there are some bugs in the current version that prevent this from happening. I've fixed this in the development version, available from http://github.com/hadley/plyr (click the download link) However, the whole point of plyr is that you should have to think about this kind of thing, so I'll revisit my naming scheme - probably to use . prefixes instead of suffixes. Hadley -- http://had.co.nz/