「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

相关文章

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

MySQL报错sql_mode=only_full_group_by的问题解决

《MySQL报错sql_mode=only_full_group_by的问题解决》本文主要介绍了MySQL报错sql_mode=only_full_group_by的问题解决,文中通过示例代码介绍的非... 目录报错信息DataGrip 报错还原Navicat 报错还原报错原因解决方案查看当前 sql mo

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.