for (i in 1:n_pos) { for (j in 1:(nrow(y_true_binary) - n_pos)) { + comb_matrix[i, j] <- sum(y_true_binary[pos_idx[i],] & !y_pred_binary[neg_idx[j],]) + } + } Error in sum(y_true_binary[pos_idx[i], ] & !y_pred_binary[neg_idx[j], : invalid 'type' (raw) of argument
时间: 2024-03-10 12:50:39 浏览: 128
这个错误提示是因为 `sum()` 函数不支持二进制矩阵的运算,需要先将二进制矩阵转换为逻辑矩阵。可以使用以下代码解决:
```R
# 假设真实结果为 y_true,模型预测结果为 y_pred
# 将 y_true 和 y_pred 转换成二进制矩阵,每一行表示一个样本的二进制编码
y_true_binary <- as.matrix(intToBits(y_true))
y_pred_binary <- as.matrix(intToBits(y_pred))
# 将二进制矩阵转换为逻辑矩阵
y_true_logical <- y_true_binary != 0
y_pred_logical <- y_pred_binary != 0
# 计算正样本个数
n_pos <- sum(y_true == 1)
# 初始化组合数矩阵
comb_matrix <- matrix(0, nrow = n_pos, ncol = nrow(y_true_binary) - n_pos)
# 对于每个正样本,计算其与所有负样本的组合数
pos_idx <- which(y_true == 1)
neg_idx <- which(y_true == 0)
for (i in 1:n_pos) {
for (j in 1:(nrow(y_true_binary) - n_pos)) {
comb_matrix[i, j] <- sum(y_true_logical[pos_idx[i],] & !y_pred_logical[neg_idx[j],])
}
}
# 打印组合数矩阵
print(comb_matrix)
```
上述代码中,我们首先将真实结果和模型预测结果转换成二进制矩阵,每一行表示一个样本的二进制编码。然后将二进制矩阵转换为逻辑矩阵。接着计算正样本个数,并初始化组合数矩阵。在计算组合数时,我们使用逻辑矩阵进行运算。最后打印组合数矩阵。
阅读全文