首页 > 解决方案 > 使用 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)

它工作正常,但它返回了一个数据框列表,没有像我期望的那样为每个元素分配名称。

我需要每个名为部门名称的数据框。

标签: rlapply

解决方案


1)简化示例以使用get.employeesdepts在最后的注释中,我们可以使用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")

推荐阅读