R 这意味着什么:找不到函数的继承方法‘;A’;签字‘&引用;B"’;

R 这意味着什么:找不到函数的继承方法‘;A’;签字‘&引用;B"’;,r,R,我是R新手,不断收到错误消息,如下所示: 找不到签名“B”的函数“A”的继承方法 在大多数情况下,我可以通过在线查找其他示例来解决问题,但我想了解错误消息的含义,以便更好地了解R的工作原理 例如,此代码: library("RSQLite") con = dbConnect(drv="SQLite", dbname="database.db") dbClearResult(p1) 生成此警告: 找不到签名“character”的函数“dbConnect”的继承方法 修复该错误后,此代码: l

我是R新手,不断收到错误消息,如下所示:

找不到签名“B”的函数“A”的继承方法

在大多数情况下,我可以通过在线查找其他示例来解决问题,但我想了解错误消息的含义,以便更好地了解R的工作原理

例如,此代码:

library("RSQLite")
con = dbConnect(drv="SQLite", dbname="database.db")
dbClearResult(p1)
生成此警告:

找不到签名“character”的函数“dbConnect”的继承方法

修复该错误后,此代码:

library("RSQLite")
con = dbConnect(drv="SQLite", dbname="database.db")
dbClearResult(p1)
产生以下警告:

找不到签名“data.frame”的函数“dbClearResult”的继承方法

有人能解释一下这类错误信息想告诉我什么吗


具体来说,术语“interhited”、“method”、“function”和“signature”似乎都与我从其他语言中理解的概念有关,但此错误的句子结构表明,它们在R中的含义略有不同。

这是当您尝试将S4泛型函数应用于不存在已定义S4方法(或至少已附加到当前R会话)的类的对象时将获得的消息类型

下面是一个使用光栅包(用于空间光栅数据)的示例,其中充满了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"’
库(光栅)
##raster::rotate()是一个S4函数,对于“raster”类对象只有一个方法
isS4(轮换)
#[1]是的
显示方法(旋转)
#功能:旋转(包光栅)
#x=“光栅”
##让我们看看当我们传递一个不属于“光栅”类的对象时会发生什么

由于名称空间冲突,我多次看到此消息

这是一个MRE:
散列
数据。表
库都有
复制
函数

在新的
R
会话中:

> library(data.table)
> library(hash)
导致从
数据中复制
。表
被屏蔽:

> DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
> copy(DT)
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘copy’ for signature ‘"data.table"’
解决方案是指定名称空间:


你肯定应该包括产生这个错误的代码。有好几段代码产生了类似的错误,我不是在寻找具体的解决方案,而是对这类错误的解释。所以选择一段,并将其包含在你的问题中。错误可能来自不同的情况,但您应该提供一个具体的、可重复的示例作为问题的基础。看起来
dbConnect
函数需要一个DBIDriver对象而不是字符串(我认为文档是错误的)。请参见
?dbConnect
上的示例。而
dbClearResult
应该用于
dbSendQuery
的返回值,而不是
fetch()
。基本上,在这两种情况下,您只是向函数传递了一个错误类型的对象。我想你需要做更多类似的事情:
mydrv@JoshObrien谢谢!S4是R型系统吗?将
rotate
应用于
x
的错误可以通过(例如)将
x
的类型更改为定义了
rotate
的某个类型来修复?@user12341234对于第一个问题,它实际上比这更复杂。S4是R的面向对象类系统之一。S3是最常用的,而S4可能是第二常用的。或者更多。是的,修复从应用
rotate()
x
的错误的唯一方法是确保
x
是类对象
“光栅”
@JoshObrien谢谢,我感谢你的帮助。即使已经过时,我也只想感谢Josh提供了这个答案!从未如此迅速地解决过问题,即使我仍然不完全理解为什么这个pkg会导致这个问题。一个
data.table::shift
操作在我的代码中中断,因为我在这里和那里更改了许多小的位,并且从未怀疑这个库是罪魁祸首!