Rが標準で読み込むパッケージの関数が動かなくなったときの対処法
自作関数を作って他のRスクリプトで実行しようとしたら自作関数内で動いている標準で読み込まれるはずのパッケージの関数がcould not find function
となってしまいました。いろいろ調べてたら解決したので、メモしておきます。
自作関数内の関数が読み込まれない
まず、以下のような関数を自作しました。
> lm_coef=function(model){ > coef(lm(model)) > }
そしてこれを書いたRスクリプトを別のRスクリプトからsource(ファイル)
で読み込んで実行
> lm_coef(model)
その結果、以下のようなエラーが返されました。
Error in coef(lm(model)) : could not find function "coef"
coef()
は標準で読み込まれている関数のはずなので困りました。
解決策
いろいろネットを漁っていたら以下のようなページを見つけました。
とりあえず、getAnywhere
でcoef()
が収められているパッケージを探します。
> getAnywhere(coef)
これを実行すると以下のように返されました。
A single object matching ‘coef’ was found It was found in the following places package:stats namespace:stats with value function (object, ...) UseMethod("coef") <bytecode: 0x00000000096f9f78> <environment: namespace:stats>
つまりstatsパッケージに収められているようです。
つぎにstatsパッケージのcoef関数であることを明示するために:::
を使って自作関数を改良します。lm()
の方にも同じエラーが出たので同様に改良します。
> lm_coef=function(model){ > stats:::coef(stats:::lm(model) > }
これでエラーが解消しました。