我有一个带有名称的向量(只有一个),我想将它应用于多个对象,但函数名称只接受一个参数(一个对象),所以我必须对我想要命名的所有对象重复该过程.
names(object_1) <- namesvector
names(object_2) <- namesvector
names(object_3) <- namesvector
是否可以仅一步完成?
谢谢!
我有一个带有名称的向量(只有一个),我想将它应用于多个对象,但函数名称只接受一个参数(一个对象),所以我必须对我想要命名的所有对象重复该过程.
names(object_1) <- namesvector
names(object_2) <- namesvector
names(object_3) <- namesvector
是否可以仅一步完成?
谢谢!
更紧凑的解决方案
lapply(list(obj_1, obj_2, obj_3), setNames, name_vector)
另一种只是为了好玩:
lapply(list(object_1, object_2, object_3), structure, .Names = namesvector)
所有这些答案都在将您的对象列入清单。如果您仍然希望您的对象可以自由访问(即在全局环境中),这里是另一种解决方案:
示例对象:
object_1 <- runif(3)
object_2 <- runif(3)
object_3 <- runif(3)
你想申请的名字:
namesvector <- letters[1:3]
一些黑客应用名称:
# Objects you want to combine.
items_n <- c("object_1", "object_2", "object_3")
# Make into a list with names of objects needed for promoting to global environment.
items <- structure(lapply(items_n, get), .Names = items_n)
# Add names to object elements.
named <- lapply(items, structure, .Names = namesvector)
# Promote to global environment.
list2env(named, .GlobalEnv)
现在您仍然可以参考例如:
object_1
并取回其内容。items_n
如果您有很多对象(假设它们具有相似的名称),您也可以动态创建(要组合的对象列表):
items_n <- sapply(1:3, function(x) paste0("object_", x))
您可以尝试将所有数字向量放入一个列表中,然后lapply
通过分配对其进行处理。就像是:
# makes some vectors
obj_1 <- 1:10
obj_2 <- 1:10
obj_3 <- 1:10
name_vector <- LETTERS[1:10]
# now apply the names
lapply(list(obj_1,obj_2,obj_3), function(x) {names(x) <- name_vector; x})