使用lapply操作存储在列表中的data.frames的属性

时间:2014-05-05 09:22:08

标签: r attributes dataframe lapply

请考虑以下事项:

df <- list(df1 = data.frame(a.1 = 1, b..2 = 2), df2 = data.frame(c.1 = 3, d...4 = 5, e..3 = 8))
## $df1
##   a.1 b..2
## 1   1    2

## $df2
##   c.1 d...4 e..3
## 1   3     5    8

names(df[[1]])
## [1] "a.1"  "b..2"

现在,例如,我想删除数据框名称中的瑕疵,以便输出

## $df1
##   a1 b2
## 1   1    2

## $df2
##   c1 d4 e3
## 1   3     5    8

显而易见,以下内容无效

lapply(names(df), function(x) gsub("[.]", "", x))

这也不是

lapply(df[attributes(df)$names], function(x) gsub("[.]", "", x))

for循环无效

for(i in 1:length(df)){names(df[[i]]) <- gsub("[.]", "", names(df[[i]]))}
## $df1
##   a1 b2
## 1  1  2

## $df2
##   c1 d4 e3
## 1  3  5  8

修改

@jdharrison解决方案非常好,但我希望找到一种方法来仅操作属性而不是整个数据集(如for循环中),类似

df2 <- list(a..1 = 2, b..3 = 5)
names(df2) <- lapply(names(df2), function(x) gsub("[.]", "", x))

1 个答案:

答案 0 :(得分:2)

这样的事可能吗?

lapply(df, function(x){ 
  `names<-`(x, gsub("[.]", "",names(x)))
}
)

> lapply(df, function(x){ `names<-`(x, gsub("[.]", "",names(x)))})
$df1
  a1 b2
1  1  2

$df2
  c1 d4 e3
1  3  5  8