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],]) + } + } Error in `[<-`(`*tmp*`, i, j, value = sum(y_true_logical[pos_idx[i], ] & : subscript out of bounds
时间: 2024-03-10 15:50:41 浏览: 72
XGB_function:XGboost ensinada pela Curso-R的基础材料
这个错误提示是因为 `comb_matrix` 的列数不正确,导致程序无法为其赋值。可能是由于计算负样本个数时有误导致的。请确保负样本个数的计算正确,即:
```R
n_neg <- sum(y_true == 0)
```
同时,`comb_matrix` 的列数应该为负样本个数:
```R
comb_matrix <- matrix(0, nrow = n_pos, ncol = n_neg)
```
修改后的完整代码如下:
```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)
n_neg <- sum(y_true == 0)
# 初始化组合数矩阵
comb_matrix <- matrix(0, nrow = n_pos, ncol = n_neg)
# 对于每个正样本,计算其与所有负样本的组合数
pos_idx <- which(y_true == 1)
neg_idx <- which(y_true == 0)
for (i in 1:n_pos) {
for (j in 1:n_neg) {
comb_matrix[i, j] <- sum(y_true_logical[pos_idx[i],] & !y_pred_logical[neg_idx[j],])
}
}
# 打印组合数矩阵
print(comb_matrix)
```
上述代码中,我们修正了 `comb_matrix` 的列数为负样本个数,并计算了负样本个数。在计算组合数时,我们使用逻辑矩阵进行运算。最后打印组合数矩阵。
阅读全文