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

如何在R中将dslabs包的tissue_gene_expression列表转为数据框?

使用caret训练tissue_gene_expression数据集时出现维度错误

我正在R中构建基础机器学习模型,使用dslabs包中的tissue_gene_expression大型列表数据集。此前用数据框格式的数据集时,以下代码能正常运行:

library(caret)
library(rpart)
library(dslabs)
data("any_dataset_here")

set.seed(1)
fit <- train(y ~ x, method = "rpart", tuneGrid = data.frame(cp = seq(0, 0.1, 0.01)), data = any_dataset_here)
plot(fit)

但将这套方法应用到tissue_gene_expression时,出现了如下错误:

Error in data[0, cols, drop = FALSE] : incorrect number of dimensions

我尝试过多种列表转数据框的方法,还试过拆分数据集后合并:

x <- tissue_gene_expression$x
y <- tissue_gene_expression$y
data <- merge(as.data.frame(x), as.data.frame(y))

但都没能解决问题,现在陷入困境,应该有简单的解决方案,求帮助。


数据集结构说明

dslabs包中tissue_gene_expression的样例结构:

tissue_samp <- list(x = structure(c(9.82567961156526, 9.63124675443192, 9.6905477405041, 8.32716269991154, 8.54282675765235, 8.47648576924408, 5.49938189571546, 5.64429228822371, 5.71718693776275, 8.69237073974266, 8.83367868047273, 8.49862302902272), dim = 3:4, dimnames = list(c("cerebellum_1", "cerebellum_2", "cerebellum_3"), c("MAML1", "LHPP", "SEPT10", "B3GNT4"))), y = structure(c(1L, 1L, 1L), levels = c("cerebellum", "colon", "endometrium", "hippocampus", "kidney", "liver", "placenta"), class = "factor"))

样例中x为3×4矩阵,y为长度3的因子。真实数据集的结构:

str(tissue_gene_expression)
# List of 2
#  $ x: num [1:189, 1:500] 9.83 9.63 9.69 9.99 9.58 ...
#   ..- attr(*, "dimnames")=List of 2
#   .. ..$ : chr [1:189] "cerebellum_1" "cerebellum_2" "cerebellum_3" "cerebellum_4" ...
#   .. ..$ : chr [1:500] "MAML1" "LHPP" "SEPT10" "B3GNT4" ...
#  $ y: Factor w/ 7 levels "cerebellum","colon",..: 1 1 1 1 1 1 1 1 1 1 ...

解决方案

问题出在合并数据的方式错误:merge会按行/列名匹配,导致样本和标签错位。正确做法是把矩阵x转成数据框后,直接添加y列,保证一一对应:

library(caret)
library(rpart)
library(dslabs)
data("tissue_gene_expression")

# 转换矩阵并添加标签列
df <- as.data.frame(tissue_gene_expression$x)
df$y <- tissue_gene_expression$y

# 训练模型(用所有特征列预测y)
set.seed(1)
fit <- train(y ~ ., method = "rpart", tuneGrid = data.frame(cp = seq(0, 0.1, 0.01)), data = df)
plot(fit)

核心说明:

  • as.data.frame(tissue_gene_expression$x)将矩阵转成数据框,每行对应一个样本,每列对应一个基因,维度完全匹配
  • 直接添加y列避免了merge带来的错位问题
  • 公式用y ~ .表示用所有特征列预测y,替代原来的y ~ x(原写法仅适用于数据框内有单独x列的场景)

内容的提问来源于stack exchange,提问作者The Flaming Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:30:01