【问题标题】:How to access list names through lapply for a function如何通过 lapply 访问列表名称以获得函数
【发布时间】:2019-08-02 12:46:43
【问题描述】:

我有以下命名列表:

all_gene_list <- list(`1` = c(
  "0610005C13Rik", "0610007N19Rik", "0610007P14Rik",
  "0610008F07Rik", "0610009B14Rik"
), `2` = c(
  "0610009B22Rik", "0610009D07Rik",
  "0610009E02Rik", "0610009L18Rik", "0610009O20Rik"
), `3` = c(
  "0610010F05Rik",
  "0610010K14Rik", "0610011F06Rik", "0610012D04Rik", "0610012H03Rik"
))

我有一个函数试图捕获每个列表的名称:

make_rds <- function (glist = NULL) {
  x <- names(glist)
  cat("List id is:", x)

}

list_out <- lapply(all_genes_list, make_rds)

我希望它打印出来:

List id is: 1
List id is: 2
List id is: 3

但事实并非如此。正确的做法是什么?

【问题讨论】:

  • 为什么不改为传递namesmake_rds &lt;- function (glist = NULL) { cat("List id is:", glist, "\n") } 然后做lapply(names(all_gene_list), make_rds) 或者直接paste0("List id is:", names(all_gene_list))
  • @RonakShah 我也想访问该列表的内容。 "0610010F05Rik, etc. 所以name 和列表的内容。

标签: r list lapply


【解决方案1】:

只对列表名称的向量使用 apply 会有什么问题:

list_out <- lapply(names(all_genes_list), function(x) cat("List id is:", x))

当然,这假设您确实想要一个来自名称输入向量的列表输出。我可能会在这里使用sapply 而不是lapply

编辑:

如果您想要一个具有相同原始内容但新名称的列表,请尝试:

all_genes_list_new = duplicate(all_genes_list)
names(all_genes_list_new) <- paste("List id is:", names(all_genes_list))

【讨论】:

  • 我也想访问该列表的内容。 "0610010F05Rik", etc... So both the name` 和列表的内容。
  • 您可以在函数定义中使用all_genes_list[[x]] 来做到这一点。
  • 那么听起来您可能想复制原始列表,然后使用您建议的名称。
【解决方案2】:

如果您想访问列表的名称和内容,我们可以改用Map/mapply。我们可以写一个函数

make_rds <- function (data, glist = NULL) {
   paste("List id is:", glist)
}

所以我们在make_rds 函数中有data 可以访问内容,glist 可以访问名称。

Map(make_rds, all_gene_list, names(all_gene_list))

#$`1`
#[1] "List id is: 1"

#$`2`
#[1] "List id is: 2"

#$`3`
#[1] "List id is: 3"

如果您喜欢tidyverse,我们可以类似地使用map2

purrr::map2(all_gene_list, names(all_gene_list), make_rds)

imap,您不需要显式传递名称。

purrr::imap(all_gene_list, make_rds)

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多