将列表的每个元素分配给 R 中的单独变量

Assign each element of a list to a separate variable in R

我有 5 个数据框,需要为每个数据框添加一列。应用 lapply 后,我需要将 res_add 重新分配给每个原始数据帧。

res_add = lapply(list(df_employee, df_sales, df_industry, df_domain, df_ip), 
                 function(df) {
                               df$label = rep("company", nrow(df))
                               return(df)
                              })

有什么办法可以不显式写成下面的assignment吗?

df_employee = res_add[[1]]
df_sales = res_add[[2]]
df_industry = res_add[[3]]
df_domain = res_add[[4]]
df_ip = res_add[[5]]

如果有什么方法可以这样分配结果,就方便多了

df_employee, df_sales, df_industry, df_domain, df_ip = res_add

我想将此功能扩展到 20 多个数据帧。明确列出每个作业很不方便。

如果我正确理解了您的想法,您可以使用 list2env 函数将列表元素转换为任何环境中的对象。但是在你使用 list2envglobalenv 中创建对象之前,如果你重命名列表的元素以便生成的对象具有有意义的名称会更好:

L <- list(a = 1, b = 2:4, p = pi, ff = gl(3, 4, labels = LETTERS[1:3]))
list2env(L, envir = globalenv())

为了命名 lapply 函数结果的每个元素,我们可以使用 setNames 函数。假设 lst 是你的结果:

lst <- vector("list", length = 5)
setNames(lst, c("df_employee", "df_sales", "df_industry", "df_domain", "df_ip"))

$df_employee
NULL

$df_sales
NULL

$df_industry
NULL

$df_domain
NULL

$df_ip
NULL

另一种选择是assign。遍历对象名称,get 对象的值,创建一个新列 'label' 和 assign 具有全局环境值的对象名称

for(nm1 in c("df_employee", "df_sales", "df_industry", "df_domain", "df_ip")) {
 tmp <- get(nm1)
 tmp$label <- "company"
 assign(nm1, tmp)
}