试图获得适当的名称(列表)输出

时间:2019-03-29 16:40:47

标签: r list apply

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

bins_indexed_probes$HSPB6_bin6

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

melt()包含相同的探针,因此我可以将其传递给我的地图缩小功能。

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

目前,我的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"
...

相反,我希望类似

[build-dependencies]
cc = "1.0.32"

我希望我很清楚,因为这是我第一次问问题,所以我已经对如果不遵循stackoverflow协议表示歉意。

已经感谢您阅读我的内容

1 个答案:

答案 0 :(得分:1)

考虑一个嵌套的lapply,其中包含提取,[[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