如何解决R语言tibble与memisc包冲突导致的tbl_df缓存类重复警告
tibble与memisc包冲突问题解决步骤
临时解决方法(无需改包,随用随设)
该警告触发的原因是R的S4类缓存中同时存在tibble和memisc定义的tbl_df类,卸载memisc不会自动清空缓存,因此警告会持续存在,可通过以下代码一键清除:
# 清空S4类缓存 assign("classNameCache", new.env(hash = TRUE), envir = getNamespace("methods"))
如果需要同时使用两个包,按以下顺序加载即可避免触发警告:
library(tibble) # 加载memisc时排除tbl_df类的导出 library(memisc, exclude = "tbl_df") library(dplyr)
永久修复方法(修改memisc源码,一次操作终身有效)
步骤1:找到memisc本地安装路径
运行R代码获取安装目录:
system.file(package = "memisc")
记录输出的路径,下文统一称为<memisc路径>。
步骤2:删除memisc中重复的tbl_df类定义
- 打开
<memisc路径>/R/AllClasses.R文件 - 搜索到
setOldClass("tbl_df")这一行,直接删除整行后保存文件
步骤3:修改NAMESPACE导入tibble的官方tbl_df类
- 打开
<memisc路径>/NAMESPACE文件 - 在文件末尾新增一行:
importClassesFrom(tibble, tbl_df),保存文件
步骤4:调整DESCRIPTION的依赖声明
- 打开
<memisc路径>/DESCRIPTION文件 - 找到
Enhances字段,删除字段中的tibble条目 - 找到
Imports字段,新增tibble (>= 1.4.0)条目,多个条目之间用英文逗号分隔,保存文件
步骤5:重新编译安装修改后的memisc包
关闭所有打开的R进程,打开新的R终端运行以下代码:
# 未安装devtools的情况下先执行此行 # install.packages("devtools") devtools::install_local("<memisc路径>")
安装完成后重新测试冲突代码,警告将完全消除。
内容的提问来源于stack exchange,提问作者llewmills
相关产品推荐
相关产品推荐

