将列表的每个元素分配给 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
函数将列表元素转换为任何环境中的对象。但是在你使用 list2env
在 globalenv
中创建对象之前,如果你重命名列表的元素以便生成的对象具有有意义的名称会更好:
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)
}
我有 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
函数将列表元素转换为任何环境中的对象。但是在你使用 list2env
在 globalenv
中创建对象之前,如果你重命名列表的元素以便生成的对象具有有意义的名称会更好:
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)
}