首页 > 解决方案 > 创建一个具有特定名称的列表(使用assign)并将值放入R中

问题描述

我是 R 新手,想要执行以下操作:在我的 for 循环之外创建一个列表,然后在里面填充它 - 棘手的部分是我希望使用某个名称创建列表,为此我使用分配。我在循环中再次调用它时遇到了麻烦。

希望我的例子能让事情变得更清楚(实际代码在循环中做的更多,但这是相关部分):

age_list = list(list(17:19, 20:23), 
            seq(from= 17,to=50, by=1))
ind_out <- "emp"
l_name <- paste0("out_stats_", ind_out)
# i create the new variable here,  you can see it in the env.

assign(l_name,vector(mode = "list", length = length(age_list))) 

for (g in 1:length(age_brackets_list)){
  
  out1 = data.frame(name = g) 
  
  # and now i wanna put this element into my new variable that i've created, but i can't call it, or use assign
  
  # i've tried 
  #assign(l_name, out1)
  #assign(l_name[[1]], out1)
  #do.call("<-", list(l_name[[g]], out1))
}

使用assign,代码将我创建的列表替换为新的数据框 - 我知道这是 assign 所做的,所以这不起作用。do.call我遇到了一个错误,因为g=2它没有被识别为一个列表(由 l_name 表示的变量只有一维(?))。

任何帮助表示赞赏!

标签: r

解决方案


您需要在由(替代循环)assign生成的数据帧列表上使用一次:lapply

age_list = list(list(17:19, 20:23), 
                seq(from= 17,to=50, by=1))
ind_out <- "emp"
l_name <- paste0("out_stats_", ind_out)
assign(l_name, lapply(1:length(age_list), function(x){
#
# more code
#
data.frame(name=g)}))

推荐阅读