如何使列表的名称成为其列的名称? 更新

问题描述

我有一组 270 个 RNA-seq 样本,我已经使用以下代码对它们的预期计数进行了子集化:

for (i in 1:length(sample_ID_list)) {
  assign(sample_ID_list[i],subset(get(sample_file_list[i]),select = expected_count)) 
  }

其中,sample_ID_list 是每个样本 ID 的字符列表(例如,313312664),而 sample_file_list 是我的环境中已存在要进行子集化的每个样本的文件名的字符列表(例如,s313312664)。

现在,这些子集样本之一的头部如下所示:

> head(`308087571`)
# A tibble: 6 x 1
  expected_count
           <dbl>
1           129 
2             8 
3           137 
4          6230.
5          1165.
6             0 

问题是我想将所有这些列表粘贴在一起以制作计数数据框,但我将无法区分没有样本 ID 作为列名而不是 expected_count 的列。

有人知道解决这个问题的好方法吗?如果您需要更多详细信息,请告诉我!

解决方法

如果我们想命名 list,循环遍历 list,提取 'expected_count' ('nm1') 的第一个元素并使用它来分配 names list

nm1 <- sapply(sample_file_list,function(x) x$expected_count[1])
names(sample_file_list) <- nm1

或来自sample_ID_list

do.call(rbind,Map(cbind,mget(sample_ID_list),name = sample_ID_list))

更新

根据评论,我们可以使用 Map 遍历 'sample_file_list' 和 'sample_ID_list',并使用来自 'sample_ID_list' 的相应值重命名 'expected_count' 列

sample_file_list2 <- Map(function(dat,nm) {
          names(dat)[match('expected_count',names(dat))] <- nm
          dat
        },sample_file_list,sample_ID_list)

或者如果我们需要一揽子解决方案,

library(data.table)
rbindlist(mget(sample_ID_list),idcol = name)
,

您可以使用:

dplyr::bind_rows(mget(sample_ID_list),.id = name)
,

更新: 非常感谢大家的帮助。我必须按如下方式更新我的 for 循环:

for (i in 1:length(sample_ID_list)) {
  assign(sample_ID_list[i],subset(get(sample_file_list[i]),select = expected_count)) 
  data<- get(sample_ID_list[i])
  colnames(data)<- sample_ID_list[i]
  assign(sample_ID_list[i],data)
  }

并且能够成功地重新分配名称!