I am trying to figure out why I am getting an error message when using ddply.
Example data:
data<-data.frame(area=rep(c(\"VA\",\"OC\",\"ES\"),each=4)
As stated in Narendra's comment to the question, this error can be caused by loading other packages that have a function called summarize
(or summarise
) that does not work as the function in plyr
. For instance:
library(plyr)
library(Hmisc)
ddply(iris, "Species", summarize, mean_sepal_length = mean(Sepal.Length))
#> Error in .fun(piece, ...) : argument "by" is missing, with no default
One solution is to call the correct function with ::
and the correct namespace:
ddply(iris, "Species", plyr::summarize, mean_sepal_length = mean(Sepal.Length))
#> Species mean_sepal_length
#> 1 setosa 5.006
#> 2 versicolor 5.936
#> 3 virginica 6.588
Alternatively, one can detach the package that has the wrong function:
detach(package:Hmisc)
ddply(iris, "Species", summarize, mean_sepal_length = mean(Sepal.Length))
#> Species mean_sepal_length
#> 1 setosa 5.006
#> 2 versicolor 5.936
#> 3 virginica 6.588
Finally, if one needs both packages and does not want to bother with ::
, one can load them in the other order:
library(Hmisc)
library(plyr)
ddply(iris, "Species", summarize, mean_sepal_length = mean(Sepal.Length))
#> Species mean_sepal_length
#> 1 setosa 5.006
#> 2 versicolor 5.936
#> 3 virginica 6.588
I had a similar problem (with a different data set, but same error message), but I discovered that ddplyr used the UK spelling "summarise". Once I made the spelling change, code worked.
Here's the code I used. When I used the "z" spelling, I got the error message Error in .fun(piece, ...) : argument "by" is missing, with no default
; but changing to "s" solved it.
library(plyr)
ddply(InsectSprays,.(spray),summarise,sum=sum(count))