【问题标题】:Is there a function in R to combine names?R中是否有组合名称的功能?
【发布时间】:2026-01-13 12:10:02
【问题描述】:

我有一个包含 5 个向量的列表。 该列表称为 VECT。这 5 个向量分别称为 VA、VB、VC、VD、VE。 我创建了一个循环来迭代地添加向量,得到 VA+VA、VA+VB、VA+VC、VA+VD、VA+VE、VB+VA、VB+VB... 我想插入一行代码,以便不仅在控制台下生成结果向量(已经完成),而且它们也被命名。如“VA+VA”、“VA+VB”等。 我怎么取这样的名字?非常感谢!

【问题讨论】:

    标签: r names


    【解决方案1】:
    VECT <- c("VA", "VB", "VC")
    setNames(nm = c(outer(VECT, VECT, paste, sep = "+")))
    #   VA+VA   VB+VA   VC+VA   VA+VB   VB+VB   VC+VB   VA+VC   VB+VC   VC+VC 
    # "VA+VA" "VB+VA" "VC+VA" "VA+VB" "VB+VB" "VC+VB" "VA+VC" "VB+VC" "VC+VC" 
    

    解释:

    • outer 做一个“外积”:它对来自两个向量的每一对运行函数(第三个参数)。在这种情况下,它实际上与

      for (nm1 in VECT) {
        for (nm2 in VECT) {
          paste(nm1, nm2, sep = "+")
        }
      }
      

      (并将其存储在向量中)

    • c(...):outer 返回一个矩阵(自己试试!),所以 c(outer(...))` 只是将它展开成一个向量。

    • setNames(nm = ...) 接受一个向量并根据其值对其进行命名。典型用法是setNames(object = vec, nm = vecnames),相当于names(vec) &lt;- vecnames,但是当object 缺失时,则默认为自命名。

    如果这里的顺序很重要,可以随时对其进行排序:

    sort(setNames(nm = c(outer(VECT, VECT, paste, sep = "+"))))
    #   VA+VA   VA+VB   VA+VC   VB+VA   VB+VB   VB+VC   VC+VA   VC+VB   VC+VC 
    # "VA+VA" "VA+VB" "VA+VC" "VB+VA" "VB+VB" "VB+VC" "VC+VA" "VC+VB" "VC+VC" 
    

    【讨论】:

    • 这能回答你的问题吗?如果有,请accept it