首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我打算通过for循环附加我的线性回归结果,但得到了一个错误。我该怎么解决它呢?

我打算通过for循环附加我的线性回归结果,但得到了一个错误。我该怎么解决它呢?
EN

Stack Overflow用户
提问于 2014-09-17 09:32:22
回答 1查看 42关注 0票数 0

我是R的新手。我有个问题。

我需要根据各种临床变量(dat[,1:27] - factor)来测试所有的基因表达值(dat[,28:63] - numeric)。我的初始代码是

代码语言:javascript
复制
dat <- readRDS("TCGA GLUT data.rds")
str(dat)

a <- round(summary(lm(SLC2A1 ~ Gender, data=dat))$coefficients, 5)
b <- round(summary(lm(SLC2A1 ~ Race, data=dat))$coefficients, 5)
c <- round(summary(lm(SLC2A1 ~ Age_Dx, data=dat))$coefficients, 5)
d <- round(summary(lm(SLC2A1 ~ Recurrence, data=dat))$coefficients, 5)
e <- round(summary(lm(SLC2A1 ~ Vital_Status, data=dat))$coefficients, 5)
f <- round(summary(lm(SLC2A1 ~ Hashimoto, data=dat))$coefficients, 5)
g <- round(summary(lm(SLC2A1 ~ Histologic_Dx, data=dat))$coefficients, 5)
h <- round(summary(lm(SLC2A1 ~ Max_Size, data=dat))$coefficients, 5)    
i <- round(summary(lm(SLC2A1 ~ Metastatic_LN, data=dat))$coefficients, 5)
j <- round(summary(lm(SLC2A1 ~ ETE, data=dat))$coefficients, 5)
k <- round(summary(lm(SLC2A1 ~ T_stage, data=dat))$coefficients, 5)
l <- round(summary(lm(SLC2A1 ~ N_stage, data=dat))$coefficients, 5)
m <- round(summary(lm(SLC2A1 ~ Stage, data=dat))$coefficients, 5)
n <- round(summary(lm(SLC2A1 ~ BRAF_V600E, data=dat))$coefficients, 5)

SLC2A1.result <- rbind(a,b,c,d,e,f,g,h,i,j,k,l,m,n)
SLC2A1.result

这项工作非常繁重,需要手动更改所有基因名称(SLC2A1 -> SLC2A2 -> SLC2A3...)所以我做了一个这样的for循环。

代码语言:javascript
复制
result <- data.frame()
for (i in 28:63){
 a <- summary(lm(dat[,i] ~ Gender, data=dat))$coefficients
 b <- summary(lm(dat[,i] ~ Race, data=dat))$coefficients
 c <- summary(lm(dat[,i] ~ Age_Dx, data=dat))$coefficients
 d <- summary(lm(dat[,i] ~ Recurrence, data=dat))$coefficients
 e <- summary(lm(dat[,i] ~ Vital_Status, data=dat))$coefficients
 f <- summary(lm(dat[,i] ~ Hashimoto, data=dat))$coefficients
 g <- summary(lm(dat[,i] ~ Histologic_Dx, data=dat))$coefficients
 h <- summary(lm(dat[,i] ~ Max_Size, data=dat))$coefficients     
 i <- summary(lm(dat[,i] ~ Metastatic_LN, data=dat))$coefficients
 j <- summary(lm(dat[,i] ~ ETE, data=dat))$coefficients
 k <- summary(lm(dat[,i] ~ T_stage, data=dat))$coefficients
 l <- summary(lm(dat[,i] ~ N_stage, data=dat))$coefficients
 m <- summary(lm(dat[,i] ~ Stage, data=dat))$coefficients
 n <- summary(lm(dat[,i] ~ BRAF_V600E, data=dat))$coefficients 
 result[i] <- rbind(a,b,c,d,e,f,g,h,i,j,k,l,m,n)
 }

然而,我得到了一个错误。

代码语言:javascript
复制
Error in `[.data.frame`(dat, , i) : undefined columns selected

我不能意识到我的错误在哪里,我该如何解决它。请帮帮我!!

EN

回答 1

Stack Overflow用户

发布于 2014-09-17 14:55:26

您应该了解summary(lm(...))$coefficients是一个2x4矩阵。因此,代码中的rbind(a,b,c,...)构建了一个28x4矩阵。然后,如果您编写result[i] <- rbind(a,b,c,...),则将一个矩阵赋给结果data.framei-th列。

我建议您为每个基因创建一个矩阵,就像您在第一个示例中所做的那样,并为每个基因构建一个矩阵列表。然后,您可以将名称分配给与您的基因名称相对应的列表索引。这将产生如下所示的代码。

代码语言:javascript
复制
result <- list()
offset <- 27
for (i in 28:63){
  a <- summary(lm(dat[,i] ~ Gender, data=dat))$coefficients
  b <- summary(lm(dat[,i] ~ Race, data=dat))$coefficients
  c <- summary(lm(dat[,i] ~ Age_Dx, data=dat))$coefficients
  d <- summary(lm(dat[,i] ~ Recurrence, data=dat))$coefficients
  # more...
  gene.mat <- rbind(a,b,c,d,e,f,g,h,i,j,k,l,m,n)
  result[[i - offset]] <- round(gene.mat, 5)
}
# name the indices by creating a character vector "SLC2A1", "SLC2A2", ...
names(result) <- paste0("SLC2A", 1:36)

然后,您可以使用result$SLC2A1访问矩阵。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25880910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档