【问题标题】:Generate named list from all combinations of two vectors从两个向量的所有组合生成命名列表
【发布时间】:2019-10-17 00:58:40
【问题描述】:

我的目标是在每个样本类型中生成一个命名的重复列表,以便我可以使用samples$cell.wt.control 调用它们。我有有效的代码,它只是荒谬的长,我觉得应该有一个更简单的方法。关于如何从两个向量制作命名列表以及如何制作两个向量的所有组合存在一些问题,但我找不到任何从两个向量的所有组合中创建命名列表,使用一个作为结果的名称。

library(tidyverse)

samples_base = c("cell.wt.control",
                 "cell.wt.protein_ko",
                 "cell.mutant.control",
                 "cell.mutant.protein_ko")
replicates = LETTERS[1:3]

samples = 
  outer(samples_base, replicates, paste, sep = ".") %>% t %>% as.data.frame %>% 
  set_names(samples_base) %>% 
  mutate_if(is.factor, as.character) %>% 
  pivot_longer(starts_with("cell")) %>% 
  group_by(name) %>% summarize(sample = list(value)) %>% deframe

#$cell.mutant.control
#[1] "cell.mutant.control.A" "cell.mutant.control.B" "cell.mutant.control.C"

#$cell.mutant.protein_ko
#[1] "cell.mutant.protein_ko.A" "cell.mutant.protein_ko.B" "cell.mutant.protein_ko.C"

#$cell.wt.control
#[1] "cell.wt.control.A" "cell.wt.control.B" "cell.wt.control.C"

#$cell.wt.protein_ko
#[1] "cell.wt.protein_ko.A" "cell.wt.protein_ko.B" "cell.wt.protein_ko.C"

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以使用purrr

    samples_base %>%
        set_names() %>%
        purrr::map(~ paste0(., ".", replicates))
    

    输出:

    $cell.wt.control
    [1] "cell.wt.control.A" "cell.wt.control.B" "cell.wt.control.C"
    
    $cell.wt.protein_ko
    [1] "cell.wt.protein_ko.A" "cell.wt.protein_ko.B" "cell.wt.protein_ko.C"
    
    $cell.mutant.control
    [1] "cell.mutant.control.A" "cell.mutant.control.B" "cell.mutant.control.C"
    
    $cell.mutant.protein_ko
    [1] "cell.mutant.protein_ko.A" "cell.mutant.protein_ko.B" "cell.mutant.protein_ko.C"
    

    【讨论】:

    • 奇怪的是,我没有想到在向量上使用 purrr。谢谢!我最终给基础 R Map 打了勾,因为有两个同样好的答案,我必须根据一些指标进行选择,而一个在计算上更快。
    【解决方案2】:

    必须将其输入和输出数据集似乎使这变得过于复杂。您可以使用 Map 循环遍历它,它将根据第一个参数自动命名:

    Map(paste, samples_base, list(replicates), sep=".")
    #List of 4
    # $ cell.wt.control       : chr [1:3] "cell.wt.control.A" "cell.wt.control.B" ...
    # $ cell.wt.protein_ko    : chr [1:3] "cell.wt.protein_ko.A" "cell.wt.protein_ko.B" ...
    # $ cell.mutant.control   : chr [1:3] "cell.mutant.control.A" "cell.mutant.control.B" ...
    # $ cell.mutant.protein_ko: chr [1:3] "cell.mutant.protein_ko.A" "cell.mutant.protein_ko.B" ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-16
      • 2016-10-18
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多