微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用列表中的信息在 R 中循环一段代码,并根据同一列表中的信息更改变量名称?

如何解决如何使用列表中的信息在 R 中循环一段代码,并根据同一列表中的信息更改变量名称?

我有这个清单:

file_name <- list.files(path = "./GSE124395/",pattern = "\\.csv$",full.names = TRUE)

并且我想获取该列表中的每个文件名并为每个文件名运行以下代码,以便将此列表中的每个项目都放入自己的矩阵中

P301_3_matrix <- read.delim(file = './GSE124395//GSM3531672_P301_3_CRYOMIXED11.coutt.csv')

P301_3_matrix <- data.frame(P301_3_matrix[,-1],row.names=P301_3_matrix[,1])
P301_3_matrix <- as.matrix(P301_3_matrix)

P301_3_colname <- read.table(file = './GSE124395//GSE124395_celseq_barcodes.192.txt',header = FALSE,row.names = 1)
P301_3_colname <- data.frame(P301_3_colname[,col=P301_3_colname[,1])
P301_3_colname <- as.matrix(P301_3_colname)
dim(P301_3_colname)
colnames(P301_3_matrix) <- P301_3_colname[,1] 

这是这段代码输出

enter image description here

我想为每个“./GSE.csv”文件重复此代码,并使用 ./GSE 文件名中的信息更改 P301_3_matrix 名称

到目前为止,这是我的尝试,但它返回错误文件中的错误文件,“rt”):无效的“描述”参数

matrix_list <- list()               # Create empty list
matrix_list

for (i in 1:length(file_name)) {
  for (i in file_name){
    matrix <- read.delim(file = file_name[i])
  
  matrix <- data.frame(matrix[,row.names=matrix[,1])
  matrix <- as.matrix(matrix) #<- makes the excel file into a matrix
  
  matrix_colname <- read.table(file = './GSE124395//GSE124395_celseq_barcodes.192.txt',row.names = 1)
  matrix_colname <- data.frame(matrix_colname[,col=matrix_colname[,1])
  matrix_colname <- as.matrix(matrix_colname)
  dim(matrix_colname)
  colnames(matrix) <- matrix_colname[,1]
  
  matrix_list[[i]] <- matrix
  
  }
 
}

希望这是有道理的,感谢您的阅读!

更新:我在下面的评论中给出了答案

解决方法

read_expression_csv = function(file){
    table = read.delim(file)
    table = data.frame(table[,-1],row.names = table[,1])
    as.matrix(table)
    }


read_barcodes = function(file){
    barcodes = read.table(file,header=FALSE,row.names=1)
    barcodes = data.frame(barcodes[,col=barcodes[,1])
    as.matrix(barcodes)
    }


get_expression_matrix(file,barcodes){
    expr = read_expression_csv(file)
    colnames(expr) = barcodes
    expr
    }


barcodes = read_barcodes("./GSE124395//GSE124395_celseq_barcodes.192.txt")[,1]

files <- list.files(path = "./GSE124395/",pattern = "\\.csv$",full.names = TRUE)
expressions = lapply(files,get_expression_matrix,barcodes=barcodes)
names(expressions) = files

由于 lapply,无需预先分配结果列表。

我只是将您的代码放入几个函数中以隔离和命名其逻辑。不能保证没有 CSV 文件它会工作。我几乎可以肯定您对 read.delim 做了一些奇怪的事情,简单的 read.table 和适当的参数化应该可以很好地工作。毕竟,read.delim 只是 read.table 的包装器。

,

好的,所以我认为这是我问题的部分答案。这会生成每个文件名的矩阵列表。

mylist<-list.files(path = "./GSE124395/",full.names = TRUE)

LoopList <- list()

for (i in 1:length(mylist)){
  
  matrix_input <- read.delim(file =mylist[i])
  matrix_input <- data.frame(matrix_input[,row.names=matrix_input[,1]) 
  matrix_input <- as.matrix(matrix_input) 
  
  colname_input <- read.delim(file =mylist[i])
  colname_input <- read.table(file = './GSE124395//GSE124395_celseq_barcodes.192.txt',header = FALSE,row.names = 1) 
  colname_input <- data.frame(colname_input[,col=colname_input[,1]) 
  colname_input <- as.matrix(colname_input) 
  colnames(matrix_input) <- colname_input[,1] 
  
  LoopList[[i]]<-matrix_input
}

LoopList[1:5]

希望这对其他人有所帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。