我想编写一个循环来从一组已经存在的矩阵创建多个数据帧。我已经使用以下代码导入并创建了这些:
temp<-list.files(pattern="*.csv")
ddives <- lapply(temp, read.csv)
所以“ddives”是我的一组 csv 文件。我现在想使用循环版本的代码从其中的每一个中创建一个数据框:
d.dives1<- data.frame(ddives[1])
在我回答您的问题之前,先快速了解一下术语:
read.csv()
是一个data.frame
。lapply()
是一个list
。因此,您现在有一个数据框列表。
如果您可以安全地假设列表中的数据框具有相同的结构(即相同的列数和相同的类),那么您可以使用rbind()
将您的数据框列表组合成一个data.frame
.
为了使这更容易,您可以使用do.call()
如下:
do.call(rbind, ddives)
do.call
使用列表元素作为参数从函数构造调用。如果它们被命名,它们将作为命名参数传递,否则按顺序传递(与 R 中一样)。在这种情况下,您将应用于rbind
列表中的所有元素,从而创建一个data.frame
.
这显然是未经测试的,因为我没有你的数据。但是,一般来说,do.call
对于这种类型的操作来说,这是一个有用的功能。
由于这是您之前发布的问题的后续,请尝试以下操作:
for (i in 1:length(ddives)) assign(temp[i], ddives[[i]])
如果您真的想要代码的循环版本,这将是:
for (i in 1:length(ddives)){
assign(paste("d.dives", i, sep =""), ddives[i])
}