使用lapply在函数内设置数据框名称

时间:2019-04-12 12:22:07

标签: 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)

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

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

2 个答案:

答案 0 :(得分:1)

1)简化示例以在笔记的末尾使用session.query(Child).options(joinedload(Child.parent)).all() get.employees,我们可以使用depts代替Map

lapply

2)也可以:

L <- Map(get.employees, depts)
names(L)
## [1] "finance" "sales"  

注意

简化示例:

L2 <- sapply(depts, get.employees, simplify = FALSE)
names(L2)
## [1] "finance" "sales"  

答案 1 :(得分:0)

您也可以尝试-

> ls <- mapply(get.employees, depts,SIMPLIFY = F)

> names(ls)
[1] "finance" "sales" 

注意-输入数据来自@G提供的答案。格罗腾德里克