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

How do I make the name of a list the name of its column?

我有一组 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') 的第一个元素并使用它来分配 nameslist

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',并用 [=34] 中的相应值重命名 '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)
  }

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