R 将数据帧转换为列表并输入函数

R 将数据帧转换为列表并输入函数,r,R,我有一个具有不同收据、项目及其值的数据集: 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'

我有一个具有不同收据、项目及其值的数据集:

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)
  )
)
我创建了一个函数,它将项的向量作为向量形式的Target、item1、item2的输入组合

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)

}
我将数据框转换为列表

    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

我尝试了两种方法:

findvalueca,b,k给出了正确的值23

当我尝试findvaluelistdata[1]时,它没有给出任何值

我犯了什么错误。Listdata应在循环中发送到findvalue

您的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)
> class(listdata[1])
[1] "list"
> findvalue(unlist(listdata[1]))
[1] 23