全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
26783 4
2017-04-08
apriori<-function(data,minsup){
  df<-data.frame(candidate=NULL,countnum=NULL)
  #找出频繁候选1项集
  for(i in 1:length(data))
    for(j in 1:length(data[[i]])){
        if(any(df$candidate == data[[i]][j]))
          df$countnum[which(df$candidate==data[[i]][j])]<-df$countnum[which(df$candidate==data[[i]][j])]+1
        else {
          #添加新元素
          a<-data.frame(candidate=data[[i]][j],countnum=1)
          df<-rbind(a,df)
        }
    }
  #提取大于最小支持度的元素
  df1<-df[with(df,countnum>=minsup),]
  #频繁n项集
  k<-0
  df2<-data.frame(candidate=NULL,countnum=NULL)
  for(i in 1:nrow(df1))
    for(j in (i+1):nrow(df1)){
      if(sum(df1$candidate[i]==df$candidate[j])==k){
        rownum<-nrow(df2)+1
        df2[rownum,]<-c(union(df1[i,1],df1[j,1]),1)
      }
    }
  return(df2)
}
list1<-list(T100=c("I1","I2","I5"),T200=c("I2","I4"),T300=c("I2","I3"),T400=c("I1","I2","I4"),T500=c("I1","I3"),
            T600=c("I2","I3"),T700=c("I1","I3"),T800=c("I1","I2","I3","I5"),T900=c("I1","I2","I3"))
result<-apriori(list1,2)
result

错误代码:Error in if (sum(df1$candidate[i] == df$candidate[j]) == k) { :
  missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In matrix(value, n, p) : data length exceeds size of matrix
2: In matrix(value, n, p) : data length exceeds size of matrix
3: In matrix(value, n, p) : data length exceeds size of matrix
4: In matrix(value, n, p) : data length exceeds size of matrix
5: In matrix(value, n, p) : data length exceeds size of matrix
6: In matrix(value, n, p) : data length exceeds size of matrix
7: In matrix(value, n, p) : data length exceeds size of matrix
8: In matrix(value, n, p) : data length exceeds size of matrix
9: In matrix(value, n, p) : data length exceeds size of matrix
10: In matrix(value, n, p) : data length exceeds size of matrix

这个警告信息也不是很懂是什么意思  
希望各位大神求解,感谢!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-4-8 17:55:05
  if(sum(df1$candidate[i]==df$candidate[j])==k)
这一行sum的参数应该是一个向量吧,但是括号里是一个true/false值,估计是这里错了,是想把符合这个条件的值加起来么?不知道sum函数能否直接这么用。之后估计是没返回结果,跟k比较大小也不知道输出了什么东西,所以if语句出错?
下面的警告是数据长度越界,比如一个1×3的矩阵,弄出了第四个数据肯定是不行的,是不是你i或者j的值越界了,或者输入的数据有问题?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-8 23:08:41
0xfff 发表于 2017-4-8 17:55
if(sum(df1$candidate==df$candidate[j])==k)
这一行sum的参数应该是一个向量吧,但是括号里是一个true/ ...
sum就是用来计算这两个向量有几个相等的元素,因为是新手,我用一些函数之前都会先做个试验的。
比如test<-c(1,2,2,2)
> test1<-2
> sum(test==test1)
[1] 3
>
数组越界那个我也不清楚,因为我的for循环的i,j都是小于行数的,而且df1也是从df里面提取出来的,所以应该不可能的   不过当务之急就是解决if语句的错误,明明试验过可以的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-9 14:48:13
R语言新手 发表于 2017-4-8 23:08
sum就是用来计算这两个向量有几个相等的元素,因为是新手,我用一些函数之前都会先做个试验的。
比如tes ...
那就奇怪了,我也是新手,瞎猜居多。
或者去掉这条if然后先找出warning的问题,然后回过头来单独摘出来if做分析。单独输出sum()的结果和sum的参数看看,是不是有问题。祝你好运了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-9 22:23:23
R语言新手 发表于 2017-4-8 23:08
sum就是用来计算这两个向量有几个相等的元素,因为是新手,我用一些函数之前都会先做个试验的。
比如tes ...
还是谢谢你的回答
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群