understanding ddply error message

后端 未结 2 416
一生所求
一生所求 2021-02-07 20:25

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)         


        
相关标签:
2条回答
  • 2021-02-07 20:52

    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
    
    0 讨论(0)
  • 2021-02-07 21:07

    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))
    
    0 讨论(0)
提交回复
热议问题