如何将包含数据框的列表拆分到各个数据框中?

时间:2016-10-14 07:56:21

标签: r data.table dplyr

我总共有6个列表(l1l2l3l4l5l6) ,我有12个数据帧(df1df2df3,...,df10df11df12)。我想拆分所有列表。这就是我的尝试。

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

我如何纠正这个问题?

2 个答案:

答案 0 :(得分:2)

您在本地使用分配。因此,在函数内部,您可以创建data.frame s df1df2。您可以将这些分配给全局环境:

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)