【发布时间】: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”等。 我怎么取这样的名字?非常感谢!
【问题讨论】:
我有一个包含 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”等。 我怎么取这样的名字?非常感谢!
【问题讨论】:
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) <- 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"
【讨论】: