使用arules包的apriori算法时报错:attempt to apply non-function
解决arules包apriori算法报错:Error in print.default(parameter) : attempt to apply non-function
我之前也碰到过这个一模一样的诡异报错!折腾了好一会儿才找到根源,大概率是全局环境里有个叫parameter的非函数对象,和apriori内部的调用逻辑冲突了,给你一步步排查和解决的方法:
第一步:排查同名变量冲突
先检查你的R工作环境里是不是不小心定义了一个叫parameter的变量(比如之前测试时赋值过parameter <- list(...)但没清理):
exists("parameter")
如果返回TRUE,那就是问题所在——apriori在运行时会尝试调用和参数相关的内部逻辑,但被你环境里的parameter对象干扰了,导致print操作时误把它当成函数来调用,自然就抛出报错了。
第二步:解决方法
方法1:删除冲突的同名对象
直接删掉这个干扰的parameter对象,然后重新运行你的apriori代码:
if (exists("parameter")) rm(parameter) # 重新执行规则挖掘代码 rules <- apriori(dt2, parameter = list(support = 0.01, confidence = 0.05, minlen=2))
方法2:更新arules包(备选)
如果上面的方法没用,可能是旧版本arules的bug,尝试更新到最新版本:
install.packages("arules") library(arules)
之后再重新运行你的代码。
额外验证:确认交易数据没问题
从你给出的str(dt)和str(dt2)来看,交易数据的转换完全正常:dt是符合要求的列表结构,dt2也正确转换成了transactions类,所以数据层面没有问题,不用在这部分浪费时间。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

