假设我有两个数据集(实际上,我有6个)作为一个列表,我对它们运行一系列函数,然后我需要将这些导出为单独的Excel文件,通过文件名的子集命名它们。在导出它们之前,我想添加两行文本,如“Report”和“Quarter”。我已经提供了一个屏幕截图的模板,我想做什么。
我得到的错误是Error in if (file.exists(file) & !overwrite) { : the condition has length > 1
,但在此之前还有一个问题,第二个lapply语句lapply(output_data, name_file
的输出只是输出一个0的列表。
library(openxlsx)
res <- list(mtcars, iris)
names(res) <- c('mtcars', 'iris')
some_fun = function(dat, vars){
dat%>%
group_by('vars')%>%
summarize(count = n())
}
name_file = function(dat, file_name){
wb <- createWorkbook()
addWorksheet(wb, 'raw')
writeData(wb, 'raw', "CAR SALES REPORT:", startCol = 1, startRow = 1)
writeData(wb, 'raw', dat, startCol = 1, startRow = 3)
addWorksheet(wb, 'processed')
writeData(wb, 'processed', "CAR SALES REPORT:")
writeData(wb, 'processed', dat, startCol = 1, startRow = 3)
saveWorkbook(wb, file = paste0(file_name, '.xlsx'), overwrite = TRUE)
}
output_data = lapply(res, some_fun, 1)
lapply(output_data, name_file, names(res))
字符串
这超出了我的第一个问题,但是假设我实际上有两个来自some_fun的独立输出,所以它实际上是
some_fun = function(dat, vars){
dat1 <- dat%>%
group_by('vars')%>%
summarize(count = n())
dat2 <- dat%>%
group_by('vars')%>%
mutate(count = n())
}
型
然后,我如何将dat1列表的输出插入到原始Excel工作表中,并将dat2列表的输出插入到处理后的Excel工作表中,如下所示:
name_file = function(dat, file_name){
wb <- createWorkbook()
addWorksheet(wb, 'raw')
writeData(wb, 'raw', "CAR SALES REPORT:", startCol = 1, startRow = 1)
writeData(wb, 'raw', dat1, startCol = 1, startRow = 3)
addWorksheet(wb, 'processed')
writeData(wb, 'processed', "CAR SALES REPORT:", startCol = 1, startRow = 1)
writeData(wb, 'processed', dat2, startCol = 1, startRow = 3)
saveWorkbook(wb, file = paste0(file_name, '.xlsx'), overwrite = TRUE)
}
型
的数据
2条答案
按热度按时间roejwanj1#
在上面更新的代码中,有两个列表必须连接,我使用了
mapply(SIMPLIFY = FALSE)
,但还有其他方法可以做到这一点。字符串
k4emjkb12#
您可以将digEmAll's approach与
xlsx
一起使用:字符串
的数据