重命名列表中Data.frame的列

重命名列表中Data.frame的列,r,dataframe,lapply,R,Dataframe,Lapply,我尝试使用Lappy(并希望使用Lappy的解决方案)重命名列表中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 <- lappl

我尝试使用Lappy(并希望使用Lappy的解决方案)重命名列表中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)
如果我单独使用与Lappy中指定的函数相同的方法,它确实有效:

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
li[1]
$u\n
x
1 1
2 2
3 3

colnames(li[[1]])命名对象后,可能需要返回该对象

 li_2 <- lapply(seq_along(li), function(i) {
               colnames(li[[i]]) <- names(li)[i]
               li[[i]]})
或者我们可以使用
Map
,它是
mapply
的包装器(这是
sapply
的多变量版本)。我们将
FUN
应用于每个输入的相应元素

 li_2 <- Map(setNames, li, names(li))

这是惊人的反馈@akrun!我感谢所有的解决方案,它真的帮助我学习语言。@RyanErwin很高兴知道它有帮助。谢谢你的回复。
 li_2 <- lapply(names(li), function(x) setNames(li[[x]], x) )
 li_2 <- Map(setNames, li, names(li))
 Map(function(x,y) setNames(x,y), li, names(li))