使用R中的循环将数百个数据帧导出为xlsx
我在R中创建了数百个数据帧,我想将它们导出到本地位置。数据帧的所有名称都存储在一个向量中:使用R中的循环将数百个数据帧导出为xlsx,r,excel,batch-processing,r-xlsx,R,Excel,Batch Processing,R Xlsx,我在R中创建了数百个数据帧,我想将它们导出到本地位置。数据帧的所有名称都存储在一个向量中: name.vec<-c('df1','df2','df3','df4','df5','df5') 因为有数百个数据帧,这既单调又危险。 我想要一些像下面这样的东西: library('xlsx') for (k in name.vec) { write.xlsx(k,file=paste0(k,'.xlsx')) } 但这是行不通的 有人知道如何做到这一点吗?您的时间和知识将不胜感激。提前感
name.vec<-c('df1','df2','df3','df4','df5','df5')
因为有数百个数据帧,这既单调又危险。
我想要一些像下面这样的东西:
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'))
}
输出为3个数据帧,取自df列表,以名称向量命名
最好在某个时候切换到较新的软件包:
writexl
您在全局环境中存储了数百个数据帧?哎呀<代码>?获取shld将是一个可靠的提示,帮助您前进。这很可怕,但确实如此,我当前的工作需要在一个循环中运行数百个回归,我得到了108个循环,我也期待着改进我的代码。我会尝试你的建议,将它们存储在一个列表中,然后你可以为for
或lappy
行走。为什么你的for循环不起作用?错误消息是什么?它将生成具有我想要的正确名称的“xlsx”文件,但文件中的内容不是从具有相同名称的数据帧传递的内容,而是仅作为“df1”的一个单元格,以便于说明。就像@Runge在回答开始时所说的那样。回答得很好,总是在寻找除循环之外的其他方法,这才是最后的选择。@JasonGoal-谢谢,是的,Sappy可以节省很多时间。这似乎是错误的。你是说name.vec
你在哪里写的name.list
?@G5W-谢谢你的检查。OP最初将name.list作为存储其dfs名称的向量引用,因此我在我的段落介绍中引用了name.list。然后我在代码中将它改为name.vec,因为它是一个向量,而不是一个列表。同时,df.list是一个列表,因此相应地命名。这本来是要澄清的,但我现在明白了这可能会让人困惑。这就是你要问的吗?是的,这有助于让事情更清楚。但是,由于您的代码(在这个答案中)从未定义过name.list
,因此最好只使用name.vec
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'))
}
sapply(1:length(df.list),
function(i) write.xlsx(df.list[[i]],file=paste0(name.vec[i],'.xlsx')))