を使用するsummarise
と、plyr
の関数をチェックする前に、グローバル環境で宣言された関数が「見えない」ようですbase
:
pryr
これは、Hadley の便利なパッケージを使用して確認できます。次のコマンドでインストールできます。
library(devtools)
install_github("pryr")
require(pryr)
require(plyr)
c <- ddply(a, .(cat), summarise, print(where("mode")))
# <environment: namespace:base>
# <environment: namespace:base>
# <environment: namespace:base>
基本的に、それはあなたの 機能を読んだり、知ったり、見たりしませんmode
。2 つの選択肢があります。最初は@AnandaMahtoが提案したもので、私も同じことをして、それに固執するようアドバイスします。もう 1 つの選択肢は、使用せずに使用summarise
して呼び出すことで、グローバル環境function(.)
のmode
関数が「見える」ようにすることです。
c <- ddply(a, .(cat), function(x) mode(x$levels))
# cat V1
# 1 1 6
# 2 2 5
# 3 3 9
なぜこれが機能するのですか?
c <- ddply(a, .(cat), function(x) print(where("mode")))
# <environment: R_GlobalEnv>
# <environment: R_GlobalEnv>
# <environment: R_GlobalEnv>
上記のように、にある関数を読み取るためglobal environment
です。
> mode # your function
# function(x)
# names(table(x))[which.max(table(x))]
> environment(mode) # where it sits
# <environment: R_GlobalEnv>
とは対照的に:
> base::mode # base's mode function
# function (x)
# {
# some lines of code to compute mode
# }
# <bytecode: 0x7fa2f2bff878>
# <environment: namespace:base>
environments
Hadleyのすばらしい wikiを