1. ホーム
  2. r

[解決済み] これはどういう意味ですか: 関数 'A' のシグネチャ '"B"' の継承メソッドを見つけることができません。

2022-02-07 22:44:02

質問

Rを初めて使うのですが、以下のようなメッセージが表示され、エラーになります。

署名 '"B"' に対する関数 'A' の継承されたメソッドを見つけることができません。

ほとんどの場合、ネットで代替例を見つけることで問題を解決することができましたが、エラーメッセージの意味を理解して、Rの仕組みをもっと理解できるようになりたいです。

例えば、こんなコード。

library("RSQLite")
con = dbConnect(drv="SQLite", dbname="database.db")

この警告を発生させます。

<ブロッククオート

関数 'dbConnect' のシグネチャ '"character"' に対して継承されたメソッドを見つけることができません。

そして、そのエラーを修正した後に、このコード。

dbClearResult(p1)

この警告を表示します。

シグネチャ '"data.frame"' に対して関数 'dbClearResult' に継承されたメソッドを見つけることができない。

このタイプのエラーメッセージが何を伝えようとしているのか、誰か説明してください。

具体的には、"interhited", "method", "function", "signature" はすべて他の言語から理解できる概念に関連しているようですが、このエラーの文構造は、それらが R では少し異なる意味を持っていることを示唆しています。

解決方法は?

これは、定義されたS4メソッドが存在しない(または少なくとも現在のRセッションにアタッチされている)クラスのオブジェクトにS4ジェネリック関数を適用しようとすると、このようなメッセージが表示されます。

以下は ラスター パッケージ(空間ラスターデータ用)には、S4関数がたくさん含まれています。

library(raster)

## raster::rotate() is an S4 function with just one method, for "Raster" class objects
isS4(rotate)
# [1] TRUE
showMethods(rotate)
# Function: rotate (package raster)
# x="Raster"

## Lets see what happens when we pass it an object that's *not* of class "Raster"
x <- 1:10
class(x)
# [1] "integer"
rotate(x)
# Error in (function (classes, fdef, mtable)  : 
#   unable to find an inherited method for function ‘rotate’ for signature ‘"integer"’