首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用openxlsx导出多个数据集

使用openxlsx导出多个数据集
EN

Stack Overflow用户
提问于 2022-08-19 07:34:34
回答 2查看 59关注 0票数 0

每当我尝试添加工作表并将数据集添加到工作簿中时,我都会得到一个错误:Error: This Workbook only has 1 sheets, 4 is not valid。是否有办法将多个工作表和数据写入工作簿?由于形成特性,我想使用openxlsx

代码语言:javascript
复制
library(openxlsx)
mtcars_list <- split(mtcars, mtcars$cyl)

wb <- createWorkbook()

for (i in mtcars_list){
  addWorksheet(wb, unique(i$cyl))
  writeData(wb, unique(i$cyl), i)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-19 08:00:56

从文件中

工作表:要写入的工作表。可以是工作表索引或名称。

因为cyl是数字的,所以它试图将它映射到第四个不存在的工作表。把它包装到as.character()

代码语言:javascript
复制
library(openxlsx)
mtcars_list <- split(mtcars, mtcars$cyl)

wb <- createWorkbook()

for (i in mtcars_list){
  addWorksheet(wb, sheetName = unique(i$cyl))
  # as.character
  writeData(wb, sheet = as.character(unique(i$cyl)), i)
}
票数 3
EN

Stack Overflow用户

发布于 2022-08-19 08:05:51

问题是由您的writeData()行造成的。一个快速的“脏”解决方法就是让它一张一张地运行:

代码语言:javascript
复制
library(openxlsx)
mtcars_list <- split(mtcars, mtcars$cyl)

wb <- createWorkbook()
SHEET <- 1

for (i in mtcars_list){
  addWorksheet(wb, unique(i$cyl))
  writeData(wb, SHEET, i)
  SHEET <- SHEET + 1
}

rm(SHEET)

这将告诉您的循环为每个新的i跳到下一个工作表。我称它为“脏”,因为这会使更大的i's容易出错,而且由于SHEET将保存在您的全局环境中,所以应该在循环之后删除它,以确保下次运行代码时它不会出错。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73413313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档