简介
这是我在数值模拟时,经常存在的问题。
如果输出了非常多的表格(例如,Rmse,Rb,Cp等),我应该怎么把这么多表进行导出?
最傻的方法:一个个导出呗,导到不同的excel表格中。但是问题来了,我要模拟10组参数,每个参数有5个表格,这样做的话会产生50个表格!这多让人头大。
较聪明的方法:使用openxlsx包(或者其他类似包),将每一组参数模拟结果放到一个excel中,其中各个表格依次放到单独的sheet中,这样最后只会生成10个表格啦。
使用教程
导出
用 write.xlsx() 保存多个 sheet 的数据在一个 excel 中。注意需要下载包 openxlsx。
#下载包 install.packages("openxlsx") #加载包 library(openxlsx) # 整理数据 sheets = list("LEN"=round(len1/mc,3),"COV"=round(cov1/mc,3), "RB"=round(rb1/mc,3),"RMSE"=round(rmse1/mc,3), "MUSIG"=round(musig1/mc,3)) # 导出表 write.xlsx(sheets,"mu3n500.xlsx",colNames = TRUE,rowNames = TRUE)
代码讲解: 这里创建了一个列表变量sheets,第一个sheet名叫"LEN",数据为round(len1/mc,3)。以此类推,其他数据表按同样操作进行。最后通过write.xlsx() 将该变量进行保存。
注意:配合使用
getwd()和setwd(),设定自己想要保存的目录。
结果展示
最后找到该文件,小编这里得到的表格如下所示:包含了6个sheets,每个sheet指某个评价标准或者是参数信息。
结果展示
其他方法
前面的方法是我用的比较多的,为了看问题更加全面我还特地搜了一下,看看有没有其他方法。在stackoverflow[1]中发现还有以下几种方法可供选择。
方法一
可以使用xlsx包存储多个工作表。每个数据框使用不同的sheetName,然后使用参数append=TRUE将两个表放在同一个表格中。
library(xlsx) write.xlsx(dataframe1, file="filename.xlsx", sheetName="sheet1", row.names=FALSE) write.xlsx(dataframe2, file="filename.xlsx", sheetName="sheet2", append=TRUE, row.names=FALSE)
方法二
另一种方法是:你可以控制格式和数据放置位置,最后保存到sheet中。例如:
wb = createWorkbook() sheet = createSheet(wb, "Sheet 1") addDataFrame(dataframe1, sheet=sheet, startColumn=1, row.names=FALSE) addDataFrame(dataframe2, sheet=sheet, startColumn=10, row.names=FALSE) sheet = createSheet(wb, "Sheet 2") addDataFrame(dataframe3, sheet=sheet, startColumn=1, row.names=FALSE) saveWorkbook(wb, "My_File.xlsx")
这种方法可以说更加有效,可以将多个表放到同一个sheet中的任何位置,有兴趣的朋友可以试试。
可探索
在模拟试验的时候如果代码太乱,可以查阅:R问题|代码太乱了,谁帮我整理下?
如果想要人提醒你,数据跑完啦,可以查阅:程序结束后记得提醒我
最后想将结果制作成幻灯片,可以查阅:R沟通|用xaringan包制作幻灯片
