r - 使用 lapply 在函数内设置数据框名称
问题描述
假设为了这个例子,我有一个部门列表。他们每个人都在一个名为“departmentName”的单独表上,所以我以这种方式创建了一个列表。
depts <- c("financial","sales",.....)
然后迭代以这种方式创建一个函数来获取成员:
get.employees <- function(tablename) {
con <- DBI::dbConnect(connectiondata....)
query <- glue::glue("select name,position,area from {tablename}")
assign(tablename,
dplyr::tbl(conn, sql(query)) %>% collect())
}
lapply(depts,get.employees)
它工作正常,但它返回了一个数据框列表,没有像我期望的那样为每个元素分配名称。
我需要每个名为部门名称的数据框。
解决方案
1)简化示例以使用get.employees
,depts
在最后的注释中,我们可以使用Map
代替lapply
:
L <- Map(get.employees, depts)
names(L)
## [1] "finance" "sales"
2)这也有效:
L2 <- sapply(depts, get.employees, simplify = FALSE)
names(L2)
## [1] "finance" "sales"
笔记
简化示例:
get.employees <- function(x) BOD
depts <- c("finance", "sales")