【问题标题】:trying to get a proper names(list) output试图获得正确的名称(列表)输出
【发布时间】:2019-08-20 15:50:00
【问题描述】:

我正在尝试使用后缀将 2 级深度字符列表拆分为 1 级列表。 更准确地说,我有一个基因列表,每个包含 6 个探针列表,对应于 6 个 bin。架构如下:

feat_indexed_probes_bin$HSPB6$bin1

 [1] "cg14513218" "cg22891287" "cg20713852" "cg04719839" "cg27580050" "cg18139462" "cg02956481" "cg26608795" "cg15660498" "cg25654926" "cg04878216"

我正在尝试获取具有以下架构的列表“bins_indexed_probes”:

bins_indexed_probes$HSPB6_bin6 包含相同的探针,因此我可以将其传递给我的地图缩减函数。

我尝试了许多解决方案,例如melt()、for 循环等,但我不知道如何执行双嵌套循环(在基因和箱上)并获得只有 1 级深度的列表输出。

目前,我的func这样做如下:

create_map <- function(indexes = feat_indexed_probes_bin, binlist = c("bin1", "bin2", "bin3", "bin4", "bin5", "bin6"), genes = features) {
  map <- list()

  ret <- lapply(binlist, function(bin) {
      lapply(rownames(features), function(gene) {
      map[[paste(gene, "_", bin, sep = "")]] <- feat_indexed_probes_bin[[gene]][[bin]]
      tmp_names <<- paste(gene, "_", bin, sep = "")
      return(map)
    })
    names(map) <- tmp_names
    rm(tmp_names)
  })
  return(ret)
}

它返回:

[[6]][[374]]
  GDF10_bin6 
"cg13565300" 

[[6]][[375]]
NULL

[[6]][[376]]
[[6]][[376]]$HNF1B_bin6
[1] "cg03433642" "cg09679923" "cg17652435" "cg03348978" "cg02435495" "cg02701059" "cg05110178" "cg11862993" "cg09463047"


[[6]][[377]]
[[6]][[377]]$GPIHBP1_bin6
[1] "cg01953797" "cg00152340"

相反,我希望像

$GPIHBP1_bin1

"cg...." "cg...."

...

$GPIHBP1_bin6

"someotherprobe"

$someothergene_bin1

"probe" "probe"
...

我希望我是清楚的,因为这是我第一次提出问题,如果我没有遵循 stackoverflow 协议,我已经道歉了。

谢谢你阅读我的文章

【问题讨论】:

  • 您好,欢迎来到 Stackoverflow。请使用dput() 提供您的数据集的(小)样本,以便您的代码和问题可重现。

标签: r list apply


【解决方案1】:

考虑一个嵌套的lapply 和extract、[[setNames 调用,所有这些调用都包含在do.call 中,使用c 将返回元素绑定在一起。

bins_indexed_probes <- do.call(c,
    lapply(1:6, function(i)
           setNames(lapply(feat_indexed_probes_bin, `[[`, i),
                           paste0(names(feat_indexed_probes_bin), "_bin", i))
          )
)

# RE-ORDER ELEMENTS BY NAME                 
bins_indexed_probes <- bins_indexed_probes[sort(names(bins_indexed_probes))]    

Rextester Demo

【讨论】:

  • 感谢您的回答。我一回到家就试试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多