You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NCI60数据集指定类别子集筛选:结果不符与维度错误求助

解决NCI60数据集筛选的两个问题

先明确核心前提

NCI60是ISLR包里的列表(list)对象,不是常规的二维数据框/矩阵,它包含两个核心部分:NCI60$data(基因表达矩阵,行对应样本、列对应基因)和NCI60$labs(每个样本的类别标签向量),这是你两个错误的根源。


问题1:筛选后出现不在g3的类别

你之前用NCI60[cancers %in% g3]的错误点:

  • 首先,cancers应该对应NCI60$labs,但就算替换后,直接对list用向量索引,只会筛选list里的元素(也就是data和labs这两个组件),根本不是筛选样本。

正确操作流程

library(ISLR)
data(NCI60)

# 统计每个类别的样本数量
lab_counts <- table(NCI60$labs)
# 提取样本数>3的类别集合g3
g3 <- names(lab_counts)[lab_counts > 3]

# 获取符合条件的样本行索引
keep_rows <- which(NCI60$labs %in% g3)
# 提取筛选后的样本矩阵
subset_data <- NCI60$data[keep_rows, ]
# 同步提取对应标签
subset_labs <- NCI60$labs[keep_rows]

# 验证:只会显示g3中的类别
table(subset_labs)

问题2:incorrect number of dimensions错误

你用NCI60[NCI60$labs %in% g3, ]报错,是因为list是一维结构,不能用二维索引(行,列)的语法——二维索引只适用于矩阵、数据框这类二维对象。

正确写法

直接对NCI60$data这个二维矩阵做行筛选:

# 直接筛选数据矩阵的行
subset_data <- NCI60$data[NCI60$labs %in% g3, ]
# 同步筛选标签
subset_labs <- NCI60$labs[NCI60$labs %in% g3]

可选:转成数据框简化操作

如果习惯用数据框的语法,可以把数据和标签合并成数据框:

nci_df <- data.frame(NCI60$data, labs = NCI60$labs)
# 现在就能用数据框的筛选逻辑了
subset_df <- nci_df[nci_df$labs %in% g3, ]
# 验证类别
table(subset_df$labs)

内容的提问来源于stack exchange,提问作者Datagram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:22:07