Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中的循环将数百个数据帧导出为xlsx_R_Excel_Batch Processing_R Xlsx - Fatal编程技术网

使用R中的循环将数百个数据帧导出为xlsx

使用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')) } 但这是行不通的 有人知道如何做到这一点吗?您的时间和知识将不胜感激。提前感

我在R中创建了数百个数据帧,我想将它们导出到本地位置。数据帧的所有名称都存储在一个向量中:

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')))