我有一个带名字的向量(只有一个),我想将它应用于多个对象,但是函数名只接受一个参数(一个对象),所以我必须为所有对象重复这个过程想要命名。
names(object_1) <- namesvector
names(object_2) <- namesvector
names(object_3) <- namesvector
是否可以只在一步中完成?
谢谢!
答案 0 :(得分:6)
稍微紧凑的解决方案
lapply(list(obj_1, obj_2, obj_3), setNames, name_vector)
答案 1 :(得分:1)
您可以尝试将所有数字向量放入列表中,然后使用赋值将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})
答案 2 :(得分:1)
另一种有趣的方式:
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))