R:filter() masks 和Error in class == “subcompact“ : comparison (==) is possible only for atomic错误。

1. 背景

R作图过程中,反复确认源代码已无误的前提下,代码运行到filter()函数时出现错误:

Error in class == “subcompact” : comparison (==) is possible only for atomic and list types。

函数调用出错

2. 原因分析

确认不是源代码的问题,所以觉得可能就是R包的问题。于是重新加载作图所需的两个R包:

library(ggplot2)
library(tidyverse)

ggplot2加载无误,但加载tidyverse时提示Conflicts冲突。
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
coflicts信息

什么意思呢?tidyverse的核心包dplyr所使用的filter()函数被stats包的filter()覆盖!那又是什么意思?就是我画图时用的filter()不是我真正需要的filter()!披着羊皮的狼!又为什么会这样?原来不同的R包来源于不同的开发者,他们不会约定俗成地为不同功能的函数取不同的名字,因而包和包之间就会产生具有不同功能的同一名字的函数。而R包的加载是有顺序的,同名函数中后面加载的必定会覆盖前面加载的,导致代码运行时,默认调用后面加载的,就可能会导致出错,尤其是导致源代码准确无误而运行总是出错。原因找到,那怎么解决呢?

3. 解决办法

解决的办法很简单,"包::函数"的形式跟R解释器指明你要调用的函数就行了,如我要调用的是dplyr中的filter():

dplyr::filter()

运行后会出现关于dplyr::filter()的信息:
dplyr::filter信息

4. 结果

调用之后再次运行源代码,不再有出错提示,运行成功:
调用后运行无误
另附代码结果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值