Как задать правила для объекта lhs itemMatrix в arules R?

Я сгенерировал правила, сфокусированные на трех разных значениях на правой стороне, что-то вроде этого (в данном случае три разных значения для фаллотраек):

rules <- apriori(df, parameter=list(minlen=3,maxlen=6,supp=0.015,conf=0.6,maxtime=120),
                appearance = list(rhs=c("fallotrayec_f1", "fallotrayec_f2", "fallotrayec_f3")))

Теперь я могу извлечь из этого 3 подмножества правил, содержащих только более высокие значения поддержки для каждого значения:

rules_f1 <- subset(rules, (rhs %in% "fallotrayec_f1") & support > 0.4 )
rules_f2 <- subset(rules, subset = (rhs %in% "fallotrayec_f2") & support > 0.18  )
rules_f3 <- subset(rules, subset = (rhs %in% "fallotrayec_f3") & support > 0.015  )

После этого я получаю сторону lhs от каждого из этих 3 подмножеств:

lhs_f1 <- lhs(rules_f1)
lhs_f2 <- lhs(rules_f2)
lhs_f3 <- lhs(rules_f3)

Наконец, я хочу удалить из rules_f1 все правила с lhs, равными тем, которые есть в rules_f2 и rules_f3, затем я попытался:

rules_f1_new <- subset(rules_f1, !(lhs %in% lhs_f2) | !(lhs %in% lhs_f3) )

Но он продолжает возвращать следующую ошибку:

Error in validObject(x, complete = TRUE) : 
invalid class “itemMatrix” object: item labels not unique

Я использую Rstudio v. 1.1.423 и R v. 3.4.3. К сожалению, данные, которые я использую, защищены, но я думаю, что приведенный выше код может быть смоделирован с использованием одного из наборов демонстрационных данных. Я также загрузил свой набор данных, используя rm.duplicates = TRUE. Заранее спасибо.

1 ответ

Решение

Похоже, вы нашли ошибку в коде. Выполните следующие действия, чтобы заменить ошибочный код и проверить, соответствует ли вывод ожидаемым.

setMethod("%in%", signature(x = "itemMatrix", table = "itemMatrix"),
  function(x, table) !is.na(match(x, table))
)

Это будет исправлено в следующем выпуске arules, Спасибо за пример. Это было очень полезно в поиске проблемы.

Другие вопросы по тегам