【问题标题】:Accessing values in list without names [duplicate]访问没有名称的列表中的值[重复]
【发布时间】:2019-12-24 14:43:30
【问题描述】:

我有以下命名字符列表,可用作 ggplot2 中的调色板:

aa_palette <- c("#75041a", "#a50026", "#d73027", "#f46d43", "#fdae61", "#fee090", "#ffffbf", 
"#e0f3f8", "#aad0e5", "#abd9e9", "#74add1", "#4575b4", "#313695", "#2a167a", "#989898")
names(aa_palette) <- c("Asx", "Glx", "Ser", "Thr", "His", "Gly", "Arg", "Ala", "Tyr", "Val", 
"Met", "Phe", "Leu", "Ile", "Other")

但是,我的一些绘图中的变量与此列表中的名称不对应,因此我只想提取值而不需要创建一个全新的对象。我知道我可以使用[[]] 为单个值执行此操作,但我想访问每个图中的多个值,因此我正在寻找一种方法来执行此操作,而不必单独访问每个值然后c() 将它们一起访问。我尝试了以下方法:

unlist(aa_palette, use.names = FALSE) 
aa_palette[c("Asx", "Glx", "Ser")] 

但是这两种方法仍然返回列表中每个元素的名称。有没有一种方法可以仅访问列表中部分或全部元素的值,而不必一一[[]]它们?

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试:

    unname(aa_palette)
    

    更新

    根据下面的评论。

    或者,您可以将aa_palette 创建为列表,然后使用上面的代码。 如果您在上面运行class(aa_palette),您将得到character - 即一个字符向量,因此不能“未列出”。

    aa_palette <- list("#75041a", "#a50026", "#d73027", "#f46d43", "#fdae61", "#fee090", "#ffffbf", 
    "#e0f3f8", "#aad0e5", "#abd9e9", "#74add1", "#4575b4", "#313695", "#2a167a", "#989898")
    names(aa_palette) <- c("Asx", "Glx", "Ser", "Thr", "His", "Gly", "Arg", "Ala", "Tyr", "Val", 
    "Met", "Phe", "Leu", "Ile", "Other")
    

    然后这个工作:

    unlist(aa_palette, use.names = FALSE) 
    

    【讨论】:

    • 行得通,谢谢!你知道为什么unlist(aa_palette, use.names = FALSE) 没有给出相同的结果吗?
    • 见上面更新的答案
    • 所以从技术上讲,您没有命名字符列表,而是一个向量
    【解决方案2】:

    你可以使用:

    unname(aa_palette[c("Asx", "Glx", "Ser")])

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 2018-06-07
      相关资源
      最近更新 更多