在 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]
我知道我遗漏了一些东西,但我看不到什么...提前致谢!
使用lapply
将b
列乘以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))
我正在尝试使用一个简单的函数对列表的每个数据框的列执行操作。 这是数据:
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]
我知道我遗漏了一些东西,但我看不到什么...提前致谢!
使用lapply
将b
列乘以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))