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