使用命名列表重命名列表列表

编程入门 行业动态 更新时间:2024-10-24 21:28:16
本文介绍了使用命名列表重命名列表列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

因此,我正在使用一个包含内部其他列表的列表,其结构如下:

So I'm working with a list that contains other lists inside, with this structure:

library(graph) library(RBGL) library(Rgraphviz) show(tree) $`SO:0001968` $`SO:0001968`$`SO:0001622` $`SO:0001968`$`SO:0001622`$`SO:0001624` $`SO:0001968`$`SO:0001622`$`SO:0001624`$`SO:0002090` [1] 1 $`SO:0001968`$`SO:0001622`$`SO:0001623` $`SO:0001968`$`SO:0001622`$`SO:0001623`$`SO:0002091` [1] 1 $`SO:0001968`$`SO:0001969` $`SO:0001968`$`SO:0001969`$`SO:0002090` [1] 1 $`SO:0001968`$`SO:0001969`$`SO:0002091` [1] 1 dput(tree) list(`SO:0001968` = list(`SO:0001622` = list(`SO:0001624` = list( `SO:0002090` = 1), `SO:0001623` = list(`SO:0002091` = 1)), `SO:0001969` = list(`SO:0002090` = 1, `SO:0002091` = 1)))

我用于构建列表的数据来自名为g的对象:

The data I use to build the list comes from an object called g:

show(g) A graphNEL graph with directed edges Number of Nodes = 7 Number of Edges = 8 dput(g) new("graphNEL", nodes = c("SO:0001968", "SO:0001969", "SO:0001622", "SO:0001623", "SO:0001624", "SO:0002090", "SO:0002091"), edgeL = list( `SO:0001968` = list(edges = 3:2), `SO:0001969` = list(edges = 6:7), `SO:0001622` = list(edges = 5:4), `SO:0001623` = list(edges = 7L), `SO:0001624` = list(edges = 6L), `SO:0002090` = list(edges = integer(0)), `SO:0002091` = list(edges = integer(0))), edgeData = new("attrData", data = list(`SO:0001968|SO:0001622` = list(weight = 1), `SO:0001968|SO:0001969` = list( weight = 1), `SO:0001969|SO:0002090` = list(weight = 1), `SO:0001969|SO:0002091` = list(weight = 1), `SO:0001622|SO:0001624` = list( weight = 1), `SO:0001622|SO:0001623` = list(weight = 1), `SO:0001623|SO:0002091` = list(weight = 1), `SO:0001624|SO:0002090` = list( weight = 1)), defaults = list(weight = 1)), nodeData = new("attrData", data = list(`SO:0001968` = list(label = "coding_transcript_variant"), `SO:0001969` = list(label = "coding_transcript_intron_variant"), `SO:0001622` = list(label = "UTR_variant"), `SO:0001623` = list( label = "5_prime_UTR_variant"), `SO:0001624` = list( label = "3_prime_UTR_variant"), `SO:0002090` = list( label = "3_prime_UTR_intron_variant"), `SO:0002091` = list( label = "5_prime_UTR_intron_variant")), defaults = list( label = NA_character_)), renderInfo = new("renderInfo", nodes = list(), edges = list(), graph = list(), pars = list()), graphData = list(edgemode = "directed"))

每个SO:000XXX都对应一个名称,我可以使用函数nodeData查找名称,该函数返回一个命名列表:

Each SO:000XXX corresponds to a name, and I can find the names using the function nodeData, that returns a named list:

nodeData(g, nodes(g), "label") $`SO:0001968` [1] "coding_transcript_variant" $`SO:0001969` [1] "coding_transcript_intron_variant" $`SO:0001622` [1] "UTR_variant" $`SO:0001623` [1] "5_prime_UTR_variant" $`SO:0001624` [1] "3_prime_UTR_variant" $`SO:0002090` [1] "3_prime_UTR_intron_variant" $`SO:0002091` [1] "5_prime_UTR_intron_variant"

我需要用nodeData函数的相应字符串替换(或重命名)tree列表中的数据.

What I need is to replace (or rename) the data in the tree list with the corresponding string of the nodeData function.

例如,用nodeData函数将tree列表中的'SO:0001968'替换为coding_transcript_variant.

For example, replace the 'SO:0001968' in the tree list for coding_transcript_variant from the nodeData function.

推荐答案

此递归函数应该可以解决问题:

This recursive function should do the trick :

# you will do this but I couldn't install your packages # nodeD <- nodeData(g, nodes(g), "label") nodeD <- list(`SO:0001968` = "coding_transcript_variant", `SO:0001969` = "coding_transcript_intron_variant", `SO:0001622` = "UTR_variant", `SO:0001623` = "5_prime_UTR_variant", `SO:0001624` = "3_prime_UTR_variant", `SO:0002090` = "3_prime_UTR_intron_variant", `SO:0002091` = "5_prime_UTR_intron_variant") rename_items <- function(item){ if (is.list(item)){ item <- lapply(item,rename_items) names(item) <- unname(nodeD[names(item)]) } item } tree2 <- rename_items(tree)

结果

# $coding_transcript_variant # $coding_transcript_variant$UTR_variant # $coding_transcript_variant$UTR_variant$`3_prime_UTR_variant` # $coding_transcript_variant$UTR_variant$`3_prime_UTR_variant`$`3_prime_UTR_intron_variant` # [1] 1 # # # $coding_transcript_variant$UTR_variant$`5_prime_UTR_variant` # $coding_transcript_variant$UTR_variant$`5_prime_UTR_variant`$`5_prime_UTR_intron_variant` # [1] 1 # # # # $coding_transcript_variant$coding_transcript_intron_variant # $coding_transcript_variant$coding_transcript_intron_variant$`3_prime_UTR_intron_variant` # [1] 1 # # $coding_transcript_variant$coding_transcript_intron_variant$`5_prime_UTR_intron_variant` # [1] 1

更多推荐

使用命名列表重命名列表列表

本文发布于:2023-10-16 16:05:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1498061.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:列表   重命名

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!