【问题标题】:R loop to create multiple objects from equally as many existing objectsR循环从同样多的现有对象创建多个对象
【发布时间】:2019-03-15 19:41:29
【问题描述】:

我已尝试寻找此问题的答案,但遇到了麻烦,因为我不确定我是否在寻找正确的东西。基本上我想在 R 中创建一个循环来创建多个对象,每个对象都来自不同的对象。例如,假设我有 50 个现有对象(矩阵、数据框、图形等),它们的名称都相似(table1、table2...table50)。现在我想创建 50 个新对象,比如说 graph1...graph50。我遇到了循环问题,因为我不知道如何将名称作为字符串处理。我已经尝试过 assign 函数,但它在 assignment 参数中不够动态。我基本上想要这样的东西:

for (i in list(table names)){ graph "i" <- as.network(table "i") }

我还希望将对象分配为自身的某些功能,即图“i”

此外,如果有更有效的方法,我愿意接受。这似乎是一项简单的任务,但我无法弄清楚。现在,我实际上只是将 excel 中的语句连接起来并粘贴到 R 中,因此不会花费太长时间,但这很痛苦。谢谢。

【问题讨论】:

  • 你最初是如何创建所有这些对象的?创建相关对象以在列表中创建它们时要好得多。在你的全局环境中有一堆变量只是一个数字后缀是一个坏主意。一旦列表中有数据,您就可以轻松地将您喜欢的任何函数映射到该列表中。
  • 如果您已经有一个名为list_of_tables 的表列表,那么您将使用list_of_graphs = lapply(list_of_tables, as.network) 创建图表列表。其他事情也可以类似地工作。
  • 是的,非常感谢。我显然只是不知道如何正确使用列表,但现在一切都超级简单和干净,谢谢。

标签: r loops object


【解决方案1】:

我认为你可以有一个嵌套循环来做你正在寻找的事情;您可以对输入列表中的每个对象应用您想要的任何转换,并将结果存储在具有相同对象名称的新列表中。

in_list <- list(table1 = iris, 
                table2 = EuStockMarkets)
out_list <- list()

for(i in 1:length(in_list)){
  for(j in colnames(in_list[[i]])){
    out_list[[ gsub("table", "graph", names(in_list)[i]) ]][[j]] <- summary(in_list[[i]][,j])
  }
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2014-12-08
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多