请考虑以下事项:
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))
答案 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