1

我在几个环境中组织了数据框,每个环境都组织在列表中。我现在想从给定的一组数据框名称中搜索每个数据框,确定该名称是否存在于每个环境的特定列表名称中,如果是,则将该对象复制到目标环境的目标列表中。

在下面的示例中,我创建了应应用搜索的 2 个环境 A 和 B,并将环境 Z 作为结果环境。

关于本地环境的内容:A 和 B 在一个或两个列表中都有一些 df。列表名称(I 和 II)指的是某个分析阶段 I 和 II。主列表并不总是都存在于本地环境中,如果在列表 II 中找到数据框,则应停止在本地环境中的搜索(如果没有,则应搜索列表 I)。重要的是,如果重新应用该函数,则应覆盖输出对象。

# Create Environments
Env_A <- new.env(parent = emptyenv())  
Env_B <- new.env(parent = emptyenv())  

# Environments to apply search ####
Env_list_search <- c(Env_A, Env_B)

# Target Environment
Env_Z <- new.env(parent = emptyenv())

# Create objects to search for (within lists)
Env_A$I$df_A <- "details df_A"
Env_A$I$df_B <- "details df_B"
Env_A$II$df_A <- "details df_A"

Env_B$I$df_C <- "details df_C"
Env_B$II$df_B <- "details df_B"

# Scope of dataframes to search for:
Dataframe_search <- c("df_A","df_C")


我的想法是为搜索创建两个向量:

  • 一个具有要搜索的数据框名称
  • 一个具有应用搜索的环境名称

上面的搜索应该会导致 Env_Z 显示:II$df_A 和 II$df_C

我的想法是在 for 循环(用于数据框搜索)中创建一个 for 循环(用于环境搜索),但我被困在设置中:

我的问题:

  1. 如何在对象“Env_list_search”中引用本地环境的名称
  2. 如何在循环中引用本地环境
  3. 如何在循环中创建循环

到目前为止我创建的(未完成且有错误):

for(i in Dataframe_search) {
  
  for(j in Env_list_search) {
    
    # When dataframes occurs in list II
    if(has_name(j$II,Dataframe_search[[i]]) == T) {
      
      Env_Z$II[[Dataframe_search[[i]] <- j$II$Dataframe_search[[i]]
      
      return(
        Env_Z = Env_Z
      )
    } else {
      
      # When dataframes occurs in list I
      if(has_name(j$I,Dataframe_search[[i]]) == T) {
        
        Env_Z$I[[Dataframe_search[[i]] <- j$I$Dataframe_search[[i]]
        #)
        
        return(
          Env_Z = Env_Z
          
        )
      } else {
        
        
        return()
      }
    }
  }
}

4

0 回答 0