将名称应用于多个对象

时间:2013-03-04 14:59:22

标签: r

我有一个带名字的向量(只有一个),我想将它应用于多个对象,但是函数名只接受一个参数(一个对象),所以我必须为所有对象重复这个过程想要命名。

names(object_1) <- namesvector
names(object_2) <- namesvector
names(object_3) <- namesvector

是否可以只在一步中完成?

谢谢!

3 个答案:

答案 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))