我有一个包含不同收据,项目及其值的数据集:
library(arules)
library(VennDiagram)
Data <- data.frame(
Receipt_ID = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,5,5,6,6,6),
item = c('a','b','c','k','a','b','d','k','a','k','c','q','k', 'a','b','a','a', 'b', 'c'
)
,
value = c(2,3,2,4,2,5,6,7,8,1,2,3,4,5,6,7,8,3,4
)
)
我创建了一个市场篮子,其中一些输出如下:
rules <- data.frame(
Target = c("a","a","b"),
item1 = c("b","b","k" )
,
item2 = c("k","",""),
lift = c(1,2,3),
confidence = c(0.08,0.45,0.1)
)
)
我创建了一个函数,它将项目的Vector作为输入(目标,项目1,项目2的矢量形式的组合)
findvalue <- function (vectormb) {
keyvalue <- Data[Data$item %in% vectormb, ]
keyvaluetran <- sapply(vectormb,function(x){
ret <- unique (keyvalue$Receipt_ID[keyvalue$item==x])
})
#reducetran <- calculate.overlap(keyvaluetran)
reducetran1 <- Reduce(intersect,keyvaluetran)
totalsales <- sum (keyvalue$value[keyvalue$Receipt_ID %in% reducetran1])
return(totalsales)
}
我将Dataframe转换为List
createlist <- function(data){
subset <- data.frame(data$Target,data$item1,data$item2)
listdata <- apply(subset,1,
function(x){
ret<-list( x[1:ncol(subset)])
names(ret)<-as.character(x[1])
return(ret)
})
listdata <- createlist(rules)
列表数据将数据帧转换为矢量。
我的问题是如何将Listdata输出传递给函数findvalue。
我尝试了几件事:
findvalue(c(“a”,“b”,“k”))给出的值为23。
当我尝试findvalue(listdata [1])时,这并没有给出任何值。
我做错了什么。 Listdata应该循环发送到findvalue。
答案 0 :(得分:0)
您的createlist()
函数没有返回值 - 因此它不会为您返回任何内容。以下是我的建议:
createlist <- function(data) {
subset <- data.frame(data$Target,data$item1,data$item2)
apply(subset,1,
function(x){
ret<-list( x[1:ncol(subset)])
names(ret)<-as.character(x[1])
return(ret)
})
}
listdata <- createlist(rules)
这将正确创建您的listdata
变量。
然后,为了在其上运行findvalue()
,当前函数的编写方式,您需要传递一个向量,而不是列表。因此:
> class(listdata[1])
[1] "list"
> findvalue(unlist(listdata[1]))
[1] 23