9

我有一个数据框列表,其列有名称。

如果我想更改列表中数据框的名称(而不是父列表的名称),我无法通过 names() 或 colnames() 直接访问它们,而必须使用 lapply() 来获取名称。

但是,如果我使用 lapply 返回列名,那么它们只存在于 lapply 调用中,并且我无法为父环境中的列表分配新名称。

这是下面的MWE:

1/ 创建对象

require(xts)
data(sample_matrix)
x <- as.xts(sample_matrix)
y <- lapply(split(x, "months"), data.frame)

2/ 数据框的列名不能直接访问

names(y)

无效的

colnames(y)

无效的

3/ 我们可以尝试使用 lapply

lapply(y, function(z) names(z) <- c('Op', 'Hi', 'Lo', 'Clo'))

[[1]]

[1] “Op” “Hi” “Lo” “Clo” ...

但它实际上并没有为该对象分配名称。

4

1 回答 1

17

你可以使用setNames...

lapply( y , setNames , nm = c('Op', 'Hi', 'Lo', 'Clo') )
#[[1]]
#                 Op       Hi       Lo      Clo
#2007-01-02 50.03978 50.11778 49.95041 50.11778
#2007-01-03 50.23050 50.42188 50.23050 50.39767
#2007-01-04 50.42096 50.42096 50.26414 50.33236
#       ...      ...      ...      ...      ...

直接从帮助页面引用:

这是一个方便的函数,用于设置对象的名称并返回该对象。它在函数定义的末尾最有用,在该函数定义中创建要返回的对象,并且不希望将其存储在名称下,以便可以分配名称。

于 2013-11-13T00:24:00.143 回答