使用 R 在 excel 中使用动态 sheetNames 写入多个工作表

Use R to write multiple sheets in excel with dynamic sheetNames

这可以使用 for 循环轻松完成,但我正在寻找 lapplydplyr.

的解决方案

我有多个数据框,我想将它们导出到单独的 sheet 文件中的 excel 文件(我在类似的行中看到了很多问题和答案,但找不到解决命名问题的问题和答案 sheets 动态)。

我想用数据框的名称命名 sheet。为简单起见,我以一种模式命名了数据帧(比如 df1 到 df10)。我该怎么做?

下面是一个可重现的示例,我尝试使用两个数据帧 mtcarscars(这是有效的,但没有好的 sheetnames)。

names_of_dfs=c('mtcars','cars') 
# variable 'combined' below will have all dfs separately stored in it
combined = lapply(as.list(names_of_dfs), get)
names(combined)=names_of_dfs # naming the list but unable to use below

multi.export=function(df,filename){
  return(xlsx::write.xlsx(df,file = filename,
                          sheetName = paste0('sheet',sample(c(1:200),1)),
                          append = T))
}

lapply(combined, function(x) multi.export(x,filename='combined.xlsx'))

如果使用其他一些 r 包可以更轻松地完成,请提出建议。

尝试这样的事情:

library(xlsx)
#Workbook
wb = createWorkbook()
#Lapply
lapply(names(combined), function(s) {
  sht = createSheet(wb, s)
  addDataFrame(combined[[s]], sht)
})
saveWorkbook(wb, "combined.xlsx")

这是 writexl 的方法:

library(writexl)
write_xlsx(setNames(lapply(names_of_dfs,get),names_of_dfs),
           path = "Test.xlsx")

我们需要使用 setNames 因为 sheet 的名称是从列表名称中设置的。否则,lapply returns 的未命名列表将导致默认 sheet 名称。