在 lapply 中创建一个带有 for 循环的函数

Creating a function with a for loop into lapply

我正在尝试使用一个简单的函数对列表的每个数据框的列执行操作。 这是数据:

a<-LETTERS[1:6]
b<-1:6

df1<-as.data.frame(cbind(a,b))
df2<-as.data.frame(cbind(a,b))
df3<-as.data.frame(cbind(a,b))

df_list<-list(df1,df2,df3)

这些是我想用来重命名列表中的数据框的名称:

df_names<-c("first","second","third")

到目前为止,我已经这样做了:

df2_list <- lapply(df_list, function(df_list) { 
  for(i in df_list[[i]]$b) { 
    df_double<-list((as.numeric(df_list[[i]]$b))*(2))
    names(df_double)<-df_names[i]
  } 
  df_list
} )

这给了我这个错误:

 Error in .subset2(x, i, exact = exact) : invalid subscript type 'list' 

但是如果我尝试 运行 分别执行这两个命令,例如在列表的第一个数据帧上,它们会执行我想要的操作:

df_double<-list((as.numeric(df_list[[1]]$b))*(2))
names(df_double)<-df_names[1]

我知道我遗漏了一些东西,但我看不到什么...提前致谢!

使用lapplyb列乘以2并使用setNames分配名称。

setNames(lapply(df_list, function(x) transform(x, b = b * 2)), df_names)

#$first
#  a  b
#1 A  2
#2 B  4
#3 C  6
#4 D  8
#5 E 10
#6 F 12

#$second
#  a  b
#1 A  2
#2 B  4
#3 C  6
#4 D  8
#5 E 10
#6 F 12

#$third
#  a  b
#1 A  2
#2 B  4
#3 C  6
#4 D  8
#5 E 10
#6 F 12

为清楚起见,您也可以分步执行此操作。

names(df_list) <- df_names
lapply(df_list, function(x) transform(x, b = b * 2))