使用 R 中的循环将数百个数据帧导出为 xlsx
exports hundreds of dataframes as xlsx using loop in R
我在R中创建了数百个数据框,我想将它们导出到本地位置。所有数据帧的名称都存储在一个向量中:
name.vec<-c('df1','df2','df3','df4','df5','df5')
name.vec中的每一个都是一个数据框。
我想要做的是将这些数据帧导出为 excel 文件,但我不想按照下面的方式进行:
library("xlsx")
write.xlsx(df1,file ="df1.xlsx")
write.xlsx(df2,file ="df2.xlsx")
write.xlsx(df3,file ="df3.xlsx")
因为有数百个数据帧,这既乏味又危险。
我想要下面这样的东西:
library('xlsx')
for (k in name.vec) {
write.xlsx(k,file=paste0(k,'.xlsx'))
}
但这行不通。
有人知道如何实现吗?您的时间和知识将不胜感激。提前致谢。
for 循环不起作用的第一个原因是代码试图写入单个名称,例如 'df1' 作为 xlsx 文件内容,而不是数据框。这是因为您没有将数据帧本身存储在您拥有的 "name.vec" 中。所以要修复 for 循环,你必须做更多像这样的事情:
df.list<-list(df1,df2,df3)
name.vec<-c('df1','df2','df3')
library('xlsx')
for (k in 1:length(name.list)){
write.xlsx(df.list[[k]],file=paste0(name.vec[k],'.xlsx'))
}
但是,for 循环通常比其他选项慢。所以这是另一种方式:
sapply(1:length(df.list),
function(i) write.xlsx(df.list[[i]],file=paste0(name.vec[i],'.xlsx')))
输出是 3 个数据帧,取自 df 列表,以名称向量命名。
最好在某个时候切换到较新的软件包:writexl
。
我在R中创建了数百个数据框,我想将它们导出到本地位置。所有数据帧的名称都存储在一个向量中:
name.vec<-c('df1','df2','df3','df4','df5','df5')
name.vec中的每一个都是一个数据框。 我想要做的是将这些数据帧导出为 excel 文件,但我不想按照下面的方式进行:
library("xlsx")
write.xlsx(df1,file ="df1.xlsx")
write.xlsx(df2,file ="df2.xlsx")
write.xlsx(df3,file ="df3.xlsx")
因为有数百个数据帧,这既乏味又危险。 我想要下面这样的东西:
library('xlsx')
for (k in name.vec) {
write.xlsx(k,file=paste0(k,'.xlsx'))
}
但这行不通。
有人知道如何实现吗?您的时间和知识将不胜感激。提前致谢。
for 循环不起作用的第一个原因是代码试图写入单个名称,例如 'df1' 作为 xlsx 文件内容,而不是数据框。这是因为您没有将数据帧本身存储在您拥有的 "name.vec" 中。所以要修复 for 循环,你必须做更多像这样的事情:
df.list<-list(df1,df2,df3)
name.vec<-c('df1','df2','df3')
library('xlsx')
for (k in 1:length(name.list)){
write.xlsx(df.list[[k]],file=paste0(name.vec[k],'.xlsx'))
}
但是,for 循环通常比其他选项慢。所以这是另一种方式:
sapply(1:length(df.list),
function(i) write.xlsx(df.list[[i]],file=paste0(name.vec[i],'.xlsx')))
输出是 3 个数据帧,取自 df 列表,以名称向量命名。
最好在某个时候切换到较新的软件包:writexl
。