我总共有6个列表(l1
,l2
,l3
,l4
,l5
,l6
) ,我有12个数据帧(df1
,df2
,df3
,...,df10
,df11
,df12
)。我想拆分所有列表。这就是我的尝试。
split_df<-function(list){
for (i in 1:length(list)){
assign(paste0("df",i),list[[i]])}
}
仅在我仅使用for循环时才有效。但它不适用于该功能。
让我们看看以下列表,l1:
l1<-list(data.frame(matrix(1:10,nrow=2)),data.frame(matrix(1:4,nrow=2)))
split_df(l1)
df1
Error: object 'df1' not found
df2
Error: object 'df2' not found
但没有这个功能:
for (i in 1:length(l1)){
assign(paste0("df",i),l1[[i]])}
df1
# X1 X2 X3 X4 X5
# 1 1 3 5 7 9
# 2 2 4 6 8 10
df2
# X1 X2
# 1 1 3
# 2 2 4
我如何纠正这个问题?
答案 0 :(得分:2)
您在本地使用分配。因此,在函数内部,您可以创建data.frame
s df1
和df2
。您可以将这些分配给全局环境:
split_df<-function(list){
for (i in 1:length(list)){
assign(paste0("df",i), list[[i]], envir = .GlobalEnv)
}
}
答案 1 :(得分:1)
你可以做到
l1<-list(data.frame(matrix(1:10,nrow=2)),data.frame(matrix(1:4,nrow=2)))
names(l1) <- paste0("df", seq_along(l1))
list2env(l1, .GlobalEnv)