如何使用 imap 和 map 将列表列表写入 excel
how to write a list of list to excel using imap and map
我有一个列表列表,我想将它们输入到多个 excel 文件中,其中 excel 名称将是子列表名称,每个 sheet 的名称excel 将是每个子列表中的 df 名称。我试图利用 imap
和 map
来达到我的目标。但是我是新手,仍然对如何正确设置感到困惑。
示例列表可以使用
构建
lst1<-list(`101-01-101` = list(Demographics = structure(list(SubjectID = c("Subject ID",
"101-01-101"), BRTHDTC = c("Birthday", "1953-07-07"), SEX = c("Gender",
"Female")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"101-01-101"), DSDT = c("DS Date", "2016-03-14"), DSDT_P = c("DS Date Prob",
NA)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))), `101-02-102` = list(Demographics = structure(list(SubjectID = c("Subject ID",
"101-02-102"), BRTHDTC = c("Birthday", "1963-07-02"), SEX = c("Gender",
"Female")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"101-02-102"), DSDT = c("DS Date", "2017-04-04"), DSDT_P = c("DS Date Prob",
NA)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))), `101-03-103` = list(Demographics = structure(list(SubjectID = c("Subject ID",
"101-03-103"), BRTHDTC = c("Birthday", "1940-09-11"), SEX = c("Gender",
"Male")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"101-03-103"), DSDT = c("DS Date", NA), DSDT_P = c("DS Date Prob",
"UN-UNK-2015")), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"))), `101-04-104` = list(Demographics = structure(list(
SubjectID = c("Subject ID", "101-04-104"), BRTHDTC = c("Birthday",
"1955-12-31"), SEX = c("Gender", "Male")), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame")), DiseaseStatus = structure(list(
SubjectID = c("Subject ID", "101-04-104"), DSDT = c("DS Date",
"2016-05-02"), DSDT_P = c("DS Date Prob", NA)), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))), `104-05-201` = list(
Demographics = structure(list(SubjectID = c("Subject ID",
"104-05-201"), BRTHDTC = c("Birthday", "1950-12-04"), SEX = c("Gender",
"Female")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"104-05-201"), DSDT = c("DS Date", "2018-07-06"), DSDT_P = c("DS Date Prob",
NA)), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame"))))
我目前的代码是:
lst1 %>% imap ( ~ wb = createWorkbook()
Map(function(data, nameofsheet){
addWorksheet(wb, nameofsheet)
writeData(wb, nameofsheet, data)
}, .x, names(.x))
saveWorkbook(wb, file.path("C:/Users/SQ/Documents/",
sprintf("subject_%s.xlsx", .y)))
)
我的代码不起作用,但希望可以让您了解我尝试做的事情。我需要以这种方式完成此操作,因为我需要向 sheet 添加一些格式。谁能给我一些关于如何做到这一点的指导?
我可能没用好.x
& .y
吧。当我们使用列表时,我仍然对如何定义它们感到困惑。
非常感谢。
我们只需要对代码进行简单的调整
- 如果我们使用多个表达式,请在
{}
中阻止它
- 进入
Map
的 data
应该是 .x
而不是 .y
因为 .y
将是 list
library(openxlsx)
library(purrr)
library(dplyr)
lst1 %>%
imap ( ~ {
wb <- createWorkbook()
Map(function(data, nameofsheet){
addWorksheet(wb, nameofsheet)
writeData(wb, nameofsheet, data)
}, .x, names(.x))
saveWorkbook(wb, file.path("C:/Users/SQ/Documents/",
sprintf("subject_%s.xlsx", .y)))
}
)
-生成的输出文件
-文件内容
我有一个列表列表,我想将它们输入到多个 excel 文件中,其中 excel 名称将是子列表名称,每个 sheet 的名称excel 将是每个子列表中的 df 名称。我试图利用 imap
和 map
来达到我的目标。但是我是新手,仍然对如何正确设置感到困惑。
示例列表可以使用
构建lst1<-list(`101-01-101` = list(Demographics = structure(list(SubjectID = c("Subject ID",
"101-01-101"), BRTHDTC = c("Birthday", "1953-07-07"), SEX = c("Gender",
"Female")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"101-01-101"), DSDT = c("DS Date", "2016-03-14"), DSDT_P = c("DS Date Prob",
NA)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))), `101-02-102` = list(Demographics = structure(list(SubjectID = c("Subject ID",
"101-02-102"), BRTHDTC = c("Birthday", "1963-07-02"), SEX = c("Gender",
"Female")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"101-02-102"), DSDT = c("DS Date", "2017-04-04"), DSDT_P = c("DS Date Prob",
NA)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))), `101-03-103` = list(Demographics = structure(list(SubjectID = c("Subject ID",
"101-03-103"), BRTHDTC = c("Birthday", "1940-09-11"), SEX = c("Gender",
"Male")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"101-03-103"), DSDT = c("DS Date", NA), DSDT_P = c("DS Date Prob",
"UN-UNK-2015")), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"))), `101-04-104` = list(Demographics = structure(list(
SubjectID = c("Subject ID", "101-04-104"), BRTHDTC = c("Birthday",
"1955-12-31"), SEX = c("Gender", "Male")), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame")), DiseaseStatus = structure(list(
SubjectID = c("Subject ID", "101-04-104"), DSDT = c("DS Date",
"2016-05-02"), DSDT_P = c("DS Date Prob", NA)), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))), `104-05-201` = list(
Demographics = structure(list(SubjectID = c("Subject ID",
"104-05-201"), BRTHDTC = c("Birthday", "1950-12-04"), SEX = c("Gender",
"Female")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame")), DiseaseStatus = structure(list(SubjectID = c("Subject ID",
"104-05-201"), DSDT = c("DS Date", "2018-07-06"), DSDT_P = c("DS Date Prob",
NA)), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame"))))
我目前的代码是:
lst1 %>% imap ( ~ wb = createWorkbook()
Map(function(data, nameofsheet){
addWorksheet(wb, nameofsheet)
writeData(wb, nameofsheet, data)
}, .x, names(.x))
saveWorkbook(wb, file.path("C:/Users/SQ/Documents/",
sprintf("subject_%s.xlsx", .y)))
)
我的代码不起作用,但希望可以让您了解我尝试做的事情。我需要以这种方式完成此操作,因为我需要向 sheet 添加一些格式。谁能给我一些关于如何做到这一点的指导?
我可能没用好.x
& .y
吧。当我们使用列表时,我仍然对如何定义它们感到困惑。
非常感谢。
我们只需要对代码进行简单的调整
- 如果我们使用多个表达式,请在
{}
中阻止它
- 进入
Map
的data
应该是.x
而不是.y
因为.y
将是list
library(openxlsx)
library(purrr)
library(dplyr)
lst1 %>%
imap ( ~ {
wb <- createWorkbook()
Map(function(data, nameofsheet){
addWorksheet(wb, nameofsheet)
writeData(wb, nameofsheet, data)
}, .x, names(.x))
saveWorkbook(wb, file.path("C:/Users/SQ/Documents/",
sprintf("subject_%s.xlsx", .y)))
}
)
-生成的输出文件
-文件内容