t(as(from,“ngCMatrix))中的错误:在为函数't'选择方法时评估参数'x'时出错:asM中的错误

Error in t(as(from, “ngCMatrix)): error in evaluating the argument ‘x’ in selecting a method for function ‘t’: Error in asM

我在数据分析平台 Knime 中使用 R 代码。我从一个块中获取一个矩阵,该块从 xls 文件中读取 table 。这个矩阵叫做"my_matrix"。然后我想将先验算法应用于该矩阵的三列,但出现上述错误。有任何想法吗? 请注意 "sum(is.na(my_matrix))" 有输出 [1] 0

require(arules)
#require(arulesViz)

#some code to retreive the my_matrix

#my_matrix
my_rows= nrow(my_matrix);
my_cols= ncol(my_matrix);
matrix_temp = my_matrix[,4:5];
matrix_temp = array(c(matrix_temp, my_matrix[,20]), dim=c(my_rows,3))
#matrix_temp
my_matrix = matrix_temp

sum(is.na(my_matrix)) #output: [1] 0

my_transactions = as(my_matrix, "transactions");
summary(my_transactions)

my_matrix 是一个 table,其中的列是这种类型:(String, Integer, Integer, String, String, Integer, Double, Integer, Double, Double, Integer, Double, Double ,整数,双精度,双精度,整数,双精度,整数,字符串)。 table.

中有 3300 行
> my_matrix = as(knime.in, "matrix")
> dput(head(my_matrix, 5))
structure(c("KS", "OH", "NJ", "OH", "OK", "128", "107", "137", 
" 84", " 75", "415", "415", "415", "408", "415", "noIP", "noIP", 
"noIP", "IP", "IP", "Vmail", "Vmail", "noVmail", "noVmail", "noVmail", 
"25", "26", " 0", " 0", " 0", "265.1", "161.6", "243.4", "299.4", 
"166.7", "110", "123", "114", " 71", "113", "45.07", "27.47", 
"41.38", "50.90", "28.34", "197.4", "195.5", "121.2", " 61.9", 
"148.3", " 99", "103", "110", " 88", "122", "16.78", "16.62", 
"10.30", " 5.26", "12.61", "244.7", "254.4", "162.6", "196.9", 
"186.9", " 91", "103", "104", " 89", "121", "11.01", "11.45", 
" 7.32", " 8.86", " 8.41", "10.0", "13.7", "12.2", " 6.6", "10.1", 
" 3", " 3", " 5", " 7", " 3", "2.70", "3.70", "3.29", "1.78", 
"2.73", "1", "1", "0", "2", "3", "notChurning", "notChurning", 
"notChurning", "notChurning", "notChurning"), .Dim = c(5L, 20L
), .Dimnames = list(c("Row0", "Row1", "Row2", "Row3", "Row4"), 
    c("State", "Account length", "Area code", "International plan", 
    "Voice mail plan", "Number vmail messages", "Total day minutes", 
    "Total day calls", "Total day charge", "Total eve minutes", 
    "Total eve calls", "Total eve charge", "Total night minutes", 
    "Total night calls", "Total night charge", "Total intl minutes", 
    "Total intl calls", "Total intl charge", "Customer service calls", 
    "Churn")))

我修改了我的代码如下。我现在没有错误,但是先验算法没有找到规则:

    require(arules)
    #require(arulesViz)
    my_matrix= as(knime.in,"matrix");
    my_rows= nrow(my_matrix);
    my_cols= ncol(my_matrix);
    my_matrix = append(my_matrix[,4:5], my_matrix[,20])
    my_matrix <- array(my_matrix, dim=c(my_rows, 3))
    head(my_matrix, 2)
    my_cols = 3
    my_dedup_matrix= matrix(nrow=my_rows, ncol=my_cols);
    for (i in 1:my_rows) {
        m = my_matrix[i,];
        my_unique= unique(m);
        for (j in 1:my_cols) {
            my_dedup_matrix[i,j] = my_unique[j];
        }
    }
    my_new_data= apply(my_dedup_matrix, 1, function(x) x[!is.na(x)]);
    my_transactions = as(as.list(my_new_data), "transactions");
    summary(my_transactions)



## Mine association rules.
rules = apriori(my_transactions, parameter = list(supp= 0.1, conf= 0.8, target = "rules"));
summary(rules); # no rules found
inspect(rules); # no rules found
#inspect(rules[1:10])

您需要先将 my_matrix 转换为列表。 as(as.list(my_matrix),"transactions") 但是,我得到了一个不同的错误。

as(as.list(matrix_temp),"transactions")
transactions in sparse format with
 15 transactions (rows) and
 5 items (columns)