如何使用lapply将列表的元素放入不同的数据框中

时间:2016-06-01 08:21:04

标签: r list dataframe apply lapply

我有一个名为db的数据帧列表;每个数据框都有自己的名字。 我用:

lapply(names(db),
       function(x)write.csv(db[x],
                            file =paste0(x,'.csv')))

提取d.frame并将其保存到csv文件中。 现在我试图从列表中取出数据帧并使用此命令创建不同的数据帧:

lapply(names(db),
       function(x)as.data.frame(db[x]))

但它不会将任何数据框存储到工作区中,如何将每个具有不同名称的df存储到工作区中?

1 个答案:

答案 0 :(得分:1)

我们使用list

提取[[元素
lapply(names(db), function(x) write.csv(db[[x]],
        file =paste0(x,'.csv'), row.names=FALSE, quote= FALSE))

db[x]仍为list data.frame length 1。

如果这些是大数据集,则来自fwrite的{​​{1}}函数效率会更高

data.table

只是为了说明这个问题,

library(data.table)
lapply(names(db), function(x) fwrite(db[[x]], file = paste0(x, ".csv")))

OP的方法与set.seed(24) db <- setNames(lapply(1:3, function(i) as.data.frame(matrix(sample(1:9, 5*4, replace=TRUE), ncol=4))), paste0("df", 1:3)) 之间的区别在于OP的方法,它将[[具有列号的文件,其前缀来自'db'的write,而names不会有任何此类问题。

关于第二个问题,即在全局环境中创建多个对象,我们可以直接在'db'上使用[[

list2env

但是,不建议这样做,因为大多数操作都可以在list2env(db, envir = .GlobalEnv) 内完成。

list