如何解决R语言中‘found more than one class "xts" in cache’提示问题?
解决xts类命名空间冲突的方案
这个命名空间冲突的提示确实挺烦人的,不用显式导入quantmod也能解决,我给你几个实用的办法:
明确xts类的原生来源(首推):如果你的自定义包用的是xts包原生的xts类,不是自己定义的同名类,直接在自定义包的
NAMESPACE文件里加一行:importFrom(xts, xts)要是需要用到xts包的多个函数或类,也可以写成
import(xts)。这样R就会明确你的包中的xts类来自xts包本身,而不会把你的自定义包当成xts类的来源。由于quantmod本身也是依赖xts包的,本质上用的是同一个类,冲突提示自然就消失了。加载quantmod时排除xts类:如果是加载highcharter时间接触发了quantmod的加载导致冲突,你可以手动控制quantmod的加载方式,在全局环境里用这行代码:
library(quantmod, exclude = "xts")这样quantmod不会把xts类导入到全局环境,也就不会和你的自定义包产生冲突。如果是项目级别的需求,把这行代码放在你的R项目初始化脚本里就行。
设置全局冲突优先级:借助
conflicted包来强制指定xts类的优先来源,在你的自定义包的R/zzz.R初始化文件里添加如下代码:.onLoad <- function(libname, pkgname) { if (requireNamespace("conflicted", quietly = TRUE)) { conflicted::conflictRules("xts", winner = "xts") } }记得在自定义包的
DESCRIPTION文件的Imports字段里加上conflicted,这样包加载时就会自动设置规则,让R优先使用xts包的xts类,彻底消除冲突提示。检查是否自定义了同名类:如果你的自定义包中不小心自己定义了一个叫
xts的S3/S4类,那最彻底的解决办法就是给这个自定义类重命名——和知名包的类重名本来就容易踩坑,改个专属名字一劳永逸。
内容的提问来源于stack exchange,提问作者josche
相关产品推荐
相关产品推荐

