重命名列表中 Data.frame 的列
Rename Columns of Data.frame in list
我正在尝试使用 lapply(并希望使用 lapply 的解决方案)重命名位于列表中的 data.frame 的列,但它返回的是名称,而不是重命名的data.frames:
# define list
li <- list(u_n = data.frame(x = 1:3), r_l = data.frame(y = 4:6))
# trying to rename columns after the element of the list they're located in
li_2 <- lapply(1:length(li),
function(x,y) colnames(y[[x]]) <- names(y)[x], y = li)
但是,这个 returns:
[[1]]
[1] "u_n"
[[2]]
[1] "r_l"
如果我单独使用与 lapply 中指定的函数相同的方法,它确实有效:
li[1]
$u_n
x
1 1
2 2
3 3
colnames(li[[1]]) <- names(li)[1]
li[1]
$u_n
u_n
1 1
2 2
3 3
我们可能需要return对象命名后。
li_2 <- lapply(seq_along(li), function(i) {
colnames(li[[i]]) <- names(li)[i]
li[[i]]})
或者可以用 setNames
来完成
li_2 <- lapply(names(li), function(x) setNames(li[[x]], x) )
或者我们可以使用 Map
,它是 mapply
的包装器(即 sapply
的多变量版本)。我们将 FUN
应用于每个输入的相应元素。
li_2 <- Map(setNames, li, names(li))
在这里,我们将每个 list
元素的列名称更改为 list
元素的相应名称。如果我们使用匿名函数,它将是
Map(function(x,y) setNames(x,y), li, names(li))
我正在尝试使用 lapply(并希望使用 lapply 的解决方案)重命名位于列表中的 data.frame 的列,但它返回的是名称,而不是重命名的data.frames:
# define list
li <- list(u_n = data.frame(x = 1:3), r_l = data.frame(y = 4:6))
# trying to rename columns after the element of the list they're located in
li_2 <- lapply(1:length(li),
function(x,y) colnames(y[[x]]) <- names(y)[x], y = li)
但是,这个 returns:
[[1]]
[1] "u_n"
[[2]]
[1] "r_l"
如果我单独使用与 lapply 中指定的函数相同的方法,它确实有效:
li[1]
$u_n
x
1 1
2 2
3 3
colnames(li[[1]]) <- names(li)[1]
li[1]
$u_n
u_n
1 1
2 2
3 3
我们可能需要return对象命名后。
li_2 <- lapply(seq_along(li), function(i) {
colnames(li[[i]]) <- names(li)[i]
li[[i]]})
或者可以用 setNames
li_2 <- lapply(names(li), function(x) setNames(li[[x]], x) )
或者我们可以使用 Map
,它是 mapply
的包装器(即 sapply
的多变量版本)。我们将 FUN
应用于每个输入的相应元素。
li_2 <- Map(setNames, li, names(li))
在这里,我们将每个 list
元素的列名称更改为 list
元素的相应名称。如果我们使用匿名函数,它将是
Map(function(x,y) setNames(x,y), li, names(li))