r - 试图获得正确的名称(列表)输出
问题描述
我正在尝试使用后缀将 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 协议,我已经道歉了。
谢谢你已经阅读了我
解决方案
考虑一个嵌套lapply
的提取、、[[
和setNames
调用,所有这些都包含在do.call
usingc
中以将返回元素绑定在一起。
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))]
推荐阅读
- html - Reactjs 错误:解析错误,意外令牌
- python - ValueError:无效的文字
- python - Python程序意外停止
- c++ - 如何使用 CMake 将文件放在目标文件位置旁边?
- php - Jquery无限循环没有关注正确的领域
- java - Java swing 应用程序在线程“AWT-EventQueue-0”中抛出 NullPointerException,原因不明
- javascript - 函数内的 Javascript 暂停
- android - 您通常如何为仪器单元测试执行模拟?
- python - DynamoDB:使用 Python 导入大数据
- c# - SQL 查询的结果永远不会返回 null;