1

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

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

是否可以仅一步完成?

谢谢!

4

3 回答 3

6

更紧凑的解决方案

lapply(list(obj_1, obj_2, obj_3), setNames, name_vector)
于 2013-03-04T15:14:59.700 回答
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))
于 2013-03-04T15:28:05.507 回答
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})
于 2013-03-04T15:13:12.520 回答