「喰う・書く・逃げる」に棲む処

 動物に関するデータ分析者のブログです

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()は標準で読み込まれている関数のはずなので困りました。

解決策

いろいろネットを漁っていたら以下のようなページを見つけました。

stackoverflow.com

とりあえず、getAnywherecoef()が収められているパッケージを探します。

> 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)
> }

これでエラーが解消しました。