R:For循环中的For循环,每轮重建和导出输出
R: For Loop within a For Loop, rebuilding and exporting the output each round
所以,我是 R 的新手。
我正在尝试从患者列表 x 中读取患者 ID,提取矩阵 1 (genomicmatrix) 中的相应列(列名 = 患者姓名),然后 运行s a genomicmatrix 中的该列与另一个矩阵 (mxy) 之间的逐行统计分析,两者具有相同的行数。
然后,它将结果写入 CSV 文件。
然后,它移动到 listx 中的下一个患者并重复该过程。
再次强调,我是新手,所以我希望我说清楚了。这是我目前拥有的:
for(i in seq_along(mxy)){
for (j in seq_along(listx)){
indgene <- try(gex[,listx[j][listx[j] %in% names(gex)]])
}
zvalues[i] <- (indgene[i] - mean(mxy[i,])) / sd(mxy[i,])
geneexptest <- data.frame(gex$sample, zvalues, row.names = NULL, stringsAsFactors = FALSE)
write.table(geneexptest$gex.sample, paste(names(listx)[j], ".csv", sep = ","),
row.names=FALSE, col.names=FALSE, sep=",", quote=F)
zvalues = NULL
indgene = NULL
geneexptest = NULL
}
所以我知道这有点乱。它不起作用。它只是在 zvalue 中无休止地建立了一堆 NA。我希望它构建一个 indgene 向量,仅使用它来填充该患者的 zvalues,制作一个数据框并将其写为 csv,然后删除所有这些东西并继续处理下一个患者。
还有一件事 - 有没有办法让每个 运行 更改 CSV 文件的名称(比如以当前正在查看的患者 ID 命名?),以便最终输出是x 个 CSV 文件,每个文件对应 listx 中的一个患者。
非常感谢!!
gex
:
sample TCGA-F4-6703-01 TCGA-DM-A28E-01 TCGA-AY-6197-01 TCGA-A6-5657-01
[1,] 987 0.79790041 2.3517004 1.7580004 0.6067004
[2,] 7829 -1.13418473 -1.4130847 -2.3078847 0.2550153
[3,] 15097 -0.45561492 -0.4556149 -0.4556149 -0.4556149
[4,] 15056 0.03217751 -0.1146225 0.1363775 -0.3028225
[5,] 15058 -0.31903849 -1.2251385 -1.2339385 -0.8575385
[6,] 15072 -0.19546513 -0.4911651 -0.7853651 -1.2155651
listx <- c("TCGA-DM-A28E-01","TCGA-A6-5657-01")
mxy
:
TCGA-AD-6963-01 TCGA-AA-3663-11 TCGA-AD-6901-01 TCGA-A6-A567-01
[1,] 1.0513004 1.2421004 1.5119004 1.6991004
[2,] -0.7592847 3.2265153 -0.8288847 -0.4752847
[3,] -0.4556149 -0.4556149 -0.4556149 -0.4556149
[4,] -0.3492225 0.1348775 -0.1155225 -0.3586225
[5,] -1.7248385 0.0427615 -1.5324385 -0.3399385
[6,] -0.8287651 -0.3504651 -0.5890651 -0.1925651
好的。鉴于您示例中的信息,我将其放在一起。
首先,我只是生成了随机数来代替你的(因为我在复制 sample
后变得懒惰)。
其次,因为您要将其保存到 .csv 文件,所以我更改了 colnames
的结构。您的患者标识符中有 -
作为分隔符,但是,R 中的 colnames
将这些替换为 .
。
如果您只是使用 listx
中的同一标识符,则在为 .csv 文件创建名称时,您最终会得到:TCGA.DM.A28E.01.csv。但是,您的文件系统如何知道您是要保存 .csv 文件,还是另一种名为 .A28E.01.csv.
的格式?
这就是为什么在每个 data.frame 之后有 gsub
行的原因。
gex <- data.frame("sample" = c(987,7829,15056,15058,15072),
"TCGA-F4-6703-01" = runif(5, -1, 1),
"TCGA-DM-A28E-01" = runif(5, -1, 1),
"TCGA-AY-6197-01" = runif(5, -1, 1),
"TCGA-A6-5657-01" = runif(5, -1, 1))
colnames(gex) <- gsub("[.]", "_",colnames(gex))
listx <- c("TCGA_DM_A28E_01","TCGA_A6_5657_01")
mxy <- data.frame("TCGA-AD-6963-01" = runif(5, -1, 1),
"TCGA-AA-3663-11" = runif(5, -1, 1),
"TCGA-AD-6901-01" = runif(5, -1, 1),
"TCGA-A6-A567-01" = runif(5, -1, 1))
colnames(mxy) <- gsub("[.]", "_",colnames(mxy))
lapply(1:length(mxy), function(i){
lapply(1:length(listx), function(j){
indgene <- gex[listx[j]]
zvalues <- (indgene[i] - mean(mxy[,i])) / sd(mxy[,i])
geneexptest <- data.frame(gex$sample, zvalues, row.names = NULL,
stringsAsFactors = FALSE)
write.csv(geneexptest, file = paste0(listx[j], ".csv"),
row.names=FALSE, col.names=FALSE, sep=",", quote=F)
})
})
所以,我是 R 的新手。
我正在尝试从患者列表 x 中读取患者 ID,提取矩阵 1 (genomicmatrix) 中的相应列(列名 = 患者姓名),然后 运行s a genomicmatrix 中的该列与另一个矩阵 (mxy) 之间的逐行统计分析,两者具有相同的行数。
然后,它将结果写入 CSV 文件。
然后,它移动到 listx 中的下一个患者并重复该过程。
再次强调,我是新手,所以我希望我说清楚了。这是我目前拥有的:
for(i in seq_along(mxy)){
for (j in seq_along(listx)){
indgene <- try(gex[,listx[j][listx[j] %in% names(gex)]])
}
zvalues[i] <- (indgene[i] - mean(mxy[i,])) / sd(mxy[i,])
geneexptest <- data.frame(gex$sample, zvalues, row.names = NULL, stringsAsFactors = FALSE)
write.table(geneexptest$gex.sample, paste(names(listx)[j], ".csv", sep = ","),
row.names=FALSE, col.names=FALSE, sep=",", quote=F)
zvalues = NULL
indgene = NULL
geneexptest = NULL
}
所以我知道这有点乱。它不起作用。它只是在 zvalue 中无休止地建立了一堆 NA。我希望它构建一个 indgene 向量,仅使用它来填充该患者的 zvalues,制作一个数据框并将其写为 csv,然后删除所有这些东西并继续处理下一个患者。
还有一件事 - 有没有办法让每个 运行 更改 CSV 文件的名称(比如以当前正在查看的患者 ID 命名?),以便最终输出是x 个 CSV 文件,每个文件对应 listx 中的一个患者。
非常感谢!!
gex
:
sample TCGA-F4-6703-01 TCGA-DM-A28E-01 TCGA-AY-6197-01 TCGA-A6-5657-01
[1,] 987 0.79790041 2.3517004 1.7580004 0.6067004
[2,] 7829 -1.13418473 -1.4130847 -2.3078847 0.2550153
[3,] 15097 -0.45561492 -0.4556149 -0.4556149 -0.4556149
[4,] 15056 0.03217751 -0.1146225 0.1363775 -0.3028225
[5,] 15058 -0.31903849 -1.2251385 -1.2339385 -0.8575385
[6,] 15072 -0.19546513 -0.4911651 -0.7853651 -1.2155651
listx <- c("TCGA-DM-A28E-01","TCGA-A6-5657-01")
mxy
:
TCGA-AD-6963-01 TCGA-AA-3663-11 TCGA-AD-6901-01 TCGA-A6-A567-01
[1,] 1.0513004 1.2421004 1.5119004 1.6991004
[2,] -0.7592847 3.2265153 -0.8288847 -0.4752847
[3,] -0.4556149 -0.4556149 -0.4556149 -0.4556149
[4,] -0.3492225 0.1348775 -0.1155225 -0.3586225
[5,] -1.7248385 0.0427615 -1.5324385 -0.3399385
[6,] -0.8287651 -0.3504651 -0.5890651 -0.1925651
好的。鉴于您示例中的信息,我将其放在一起。
首先,我只是生成了随机数来代替你的(因为我在复制 sample
后变得懒惰)。
其次,因为您要将其保存到 .csv 文件,所以我更改了 colnames
的结构。您的患者标识符中有 -
作为分隔符,但是,R 中的 colnames
将这些替换为 .
。
如果您只是使用 listx
中的同一标识符,则在为 .csv 文件创建名称时,您最终会得到:TCGA.DM.A28E.01.csv。但是,您的文件系统如何知道您是要保存 .csv 文件,还是另一种名为 .A28E.01.csv.
这就是为什么在每个 data.frame 之后有 gsub
行的原因。
gex <- data.frame("sample" = c(987,7829,15056,15058,15072),
"TCGA-F4-6703-01" = runif(5, -1, 1),
"TCGA-DM-A28E-01" = runif(5, -1, 1),
"TCGA-AY-6197-01" = runif(5, -1, 1),
"TCGA-A6-5657-01" = runif(5, -1, 1))
colnames(gex) <- gsub("[.]", "_",colnames(gex))
listx <- c("TCGA_DM_A28E_01","TCGA_A6_5657_01")
mxy <- data.frame("TCGA-AD-6963-01" = runif(5, -1, 1),
"TCGA-AA-3663-11" = runif(5, -1, 1),
"TCGA-AD-6901-01" = runif(5, -1, 1),
"TCGA-A6-A567-01" = runif(5, -1, 1))
colnames(mxy) <- gsub("[.]", "_",colnames(mxy))
lapply(1:length(mxy), function(i){
lapply(1:length(listx), function(j){
indgene <- gex[listx[j]]
zvalues <- (indgene[i] - mean(mxy[,i])) / sd(mxy[,i])
geneexptest <- data.frame(gex$sample, zvalues, row.names = NULL,
stringsAsFactors = FALSE)
write.csv(geneexptest, file = paste0(listx[j], ".csv"),
row.names=FALSE, col.names=FALSE, sep=",", quote=F)
})
})