R中是否有一个函数可以组合名称?

时间:2020-09-20 04:24:08

标签: r names

我有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”等。 我怎么这样命名?非常感谢!

1 个答案:

答案 0 :(得分:2)

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做一个“外部乘积”:它在两个向量的每对上运行函数(第3个参数)。在这种情况下,它实际上与

    相同
    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) <- 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"