R: Рекомендации для всех корзин с рулетом

Мои данные транзакции, как это:

ID=c("A123","A123","A123","A123","B456","B456","B456","C789","C789")
item=c("bread", "butter", "milk", "eggs", "meat","milk", "peas", "peas", "meat")

df=data.frame(cbind(ID, item))

ID   item
1 A123  bread
2 A123 butter
3 A123   milk
4 A123   eggs
5 B456   meat
6 B456   milk
7 B456   peas

Я хочу давать рекомендации, поэтому я трансформирую данные и строю правила

library(arules)
trans = as(split(df$item, df$ID), "transactions")
rules = apriori(trans, parameter = list(support = 0.006, confidence = 0.25,
                                      minlen = 2))

Рекомендация для покупателя с корзиной 3 находится так:

basket = trans[3] 
rulesMatchLHS = is.subset(rules@lhs,basket)
suitableRules =  rulesMatchLHS & !(is.subset(rules@rhs,basket))
order.rules = sort(rules[suitableRules], by = "lift")
LIST(order.rules@rhs)[[1]]

[1] "молоко"

Но как я могу дать рекомендации для всех корзин? Я пробовал это, но получаю ошибку:

reco=function(x){
    rulesMatchLHS = is.subset(rules@lhs,x)
    suitableRules =  rulesMatchLHS & !(is.subset(rules@rhs,x))
    order.rules = sort(rules[suitableRules], by = "lift")
    LIST(order.rules@rhs)[[1]]
}

results = lapply(trans, function(x) reco(x))

Ошибка в as.vector(data): нет метода для приведения этого класса S4 к вектору

Как я могу выполнить рекомендации для всех корзин?

1 ответ

Решение

Попробуй это:

sapply(1:length(trans), function(x) reco(trans[x]))

По-видимому, нет функции для преобразования класса транзакций в вектор.

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