r - 将多个小标题导出到 XLSX -- 使用 deparse(substitute()) 时的 sheetName 问题
问题描述
我有 15 个小标题要导出到单个 XLSX 工作簿,每个集合的 sheetName 与小标题对象的名称相同。要导出单个 tibble,这很好用:
library(xlsx)
my_tibble1 %>%
write.xlsx("output_filename.xlsx",
sheetName = "my_tibble1",
append = TRUE)
然而,这些 tibbles 的数量已经足够多,因此为每个 tibbles 写出所有这些都非常耗时。所以,我写了一个函数:
output_expediter <- function(df, output_filename) {
write.xlsx(df,
output_filename,
sheetName = deparse(substitute(df)),
append = TRUE)
此函数成功地将 tibble 写入输出工作簿中的新工作表,但 sheetName 始终是单个句点(“。”)。
用于小写字母的所有变量名称都仅限于小写字符和下划线,并且它们的长度都是 31 个或更少的字符,所以我认为它们中的任何一个都不会违反 XLSX 格式约定。在 R 控制台中,运行:
deparse(substitute(my_tibble1))
按预期产生“my_tibble1”。
为什么会发生这种情况的任何想法?除了输入每张纸的名称之外,还有什么可能的解决方法吗?
解决方案
一个选项是openxlsx
library(openxlsx)
library(tibble)
output_expediter <- function(df, output_filename) {
nm1 <- deparse(substitute(df))
wb <- createWorkbook()
addWorksheet(wb, sheetName = nm1)
writeData(wb, sheet= nm1, x = df)
saveWorkbook(wb =wb, file = output_filename, overwrite = TRUE)
}
file1 <- "hello.xlsx"
df1 <- tibble(col1 = 1:5, col2 = 6:10)
output_expediter(df1, file1)
-输出
如果我们需要编写多个文件,
library(purrr)
wb1 <- createWorkbook()
output_expediter <- function(df, wb, nm1, output_filename) {
addWorksheet(wb, sheetName = nm1)
writeData(wb, sheet= nm1, x = df)
saveWorkbook(wb =wb, file = output_filename, overwrite = TRUE)
}
lst1 <- lst(df1= df1, df2= df1)
iwalk(lst1, ~ output_expediter(.x, wb = wb1, .y, file))
推荐阅读
- swift - Swift - ArrayController,它什么时候充满数据?
- algorithm - O(n log n) 算法总是优于所有 O(n^2) 算法吗?
- python - UTF-8 编码阻塞控制台打印
- android - 在科尔多瓦禁用 CORS 保护
- visual-studio - 在 VSTS 中组合代码覆盖率结果
- python - 在 Python 中处理具有大量数据的字典
- python - logger 应该是参数还是全局变量?
- reactjs - TypeError withstyles is not a function react export default
- java - StepRequest 带有 StepRequest.STEP_MIN 参数
- linux - 如何让全局安装的节点模块在终端上运行