我在 Knime 中使用 R 代码,这是一个数据分析平台。我从一个块中获取一个矩阵,该块从 xls 文件中读取一个表。该矩阵称为“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 是一个表,其中的列是这种类型: (String, Integer, Integer, String, String, Integer, Double, Integer, Double, Double, Integer, Double, Double, Integer, Double, Double, Integer, Double, Integer,细绳)。表中有 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])