「Debug R」报错unable to find an inherited method for function是如何产生的

2024-06-23 20:38

本文主要是介绍「Debug R」报错unable to find an inherited method for function是如何产生的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在一个群里看到这样一条报错,截图如下:

2013053-4668921737272f21.png
报错信息

当然这种问题解决起来也很快,无非就是把报错信息复制出来放在搜索引擎上,只不过你要挑选合适的搜索引擎。

2013053-fbbd9bacc06b1b7a.png
百度
2013053-f1d13cd9ddb82017.png
谷歌
2013053-8ba6356aad2fd382.png
必应

解决方案就是用dplyr::select

虽然报错解决了,但是我还想着要重复出这个报错。因为只有能重复出报错,才能证明你不是运气好才解决。(就和Windows上出错靠重启,不行就重装,再不行换电脑一样)。

在他提供的代码中,我判断可能是下面两行代码导致的报错,因为这两个代码都有一个select函数,或许是R无法正确的处理应该使用哪个select.

library(AnnotationHub)
library(dplyr)

于是我找了一个最简单的例子来证明我的想法

library(AnnotationHub)
library(dplyr)data("mtcars")
select(mtcars, mpg)

错误并没有出现。R并没有我想象的那么弱,泛型函数能够正确的根据对象选择合适的函数。

正当我一筹莫展时,突然想到,会不会是因为操作者只加载了AnnotationHub而跳过了dplyr包加载了呢?如此,select函数在命令空间中存在,但却没有适合data.frame的版本,所以报错了呢?

library(AnnotationDbi)
data("mtcars")
select(mtcars, mpg)# 报错信息如下
Error in (function (classes, fdef, mtable)  :unable to find an inherited method for function 'select' for signature '"data.frame"'

结果验证了我的推测。

这也是初学者最常见的错误,忘记加载R包,或者甚至根本就没有装上这个R包。

当然还有一种可能,就是另外的R包在加载的时候将已有的函数进行了屏蔽,例如MASS

2013053-0f742b2a0c9ab8bd.png
提示信息

但是报错信息不一样,他会说函数有未使用的参数。

library(dplyr)
library(MASS)
select(mtcars, mpg)
# 报错信息
Error in select(mtcars, mpg) : unused argument (mpg)

如果你在前面两个R包的基础上加载AnnotationHub时,报错又和之前一样

library(dplyr)
library(MASS)
library(AnnotationDbi)
select(mtcars, mpg)Error in (function (classes, fdef, mtable)  : unable to find an inherited method for function ‘select’ for signature ‘"data.frame"’

如果你只是调用R包,那么这种报错可以除了用dplyr::select形式,还可以用detach函数进行解决

detach("package:MASS", unload = TRUE)
detach("package:AnnotationDbi", unload = TRUE)
select(mtcars, mpg)

但是如果你准备写R包或者封装一些R脚本,那么你要特别注意这些大家特别喜欢的函数名,最好就是用packages::function的方式进行函数调用,虽然代码长了些,但是能提高稳定性。

hoptop -- 可能是中国在现场处理过R语言报错最多的人

这篇关于「Debug R」报错unable to find an inherited method for function是如何产生的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088220

相关文章

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决