【问题标题】:R - Get a list of tables matching regex pattern in a user functionR - 在用户函数中获取与正则表达式模式匹配的表列表
【发布时间】:2020-01-30 05:52:31
【问题描述】:

我希望在 R 中创建一个用户函数,它合并多个使用正则表达式查找这些表的表。在我的情况下,我想合并环境中以“m_”开头的所有表。

这正是我想要的:

Reduce(function(...) merge(..., all = TRUE), mget(apropos("^m_")))

但是当我尝试将此代码转换为用户函数时它不起作用:

    multi.merge <- function(...){
        x <- Reduce(function(...) merge(..., all = TRUE), mget(apropos(...))
        return(x)
}

dt <- multi.merge("^m_")

错误:找不到“m_table1”的值

我尝试过使用不同的函数,例如get0syms,但不同的语法最终会导致相同的错误。我怀疑这只是与我不理解的函数结构中的问题有关。

有什么办法可以做到吗?

【问题讨论】:

    标签: r regex function


    【解决方案1】:

    尝试在函数中发送一个固定参数。

    multi.merge <- function(pattern){
       Reduce(function(...) merge(..., all = TRUE), mget(ls(pattern = pattern))
       #Or
       #Reduce(function(...) merge(..., all = TRUE), mget(apropos(pattern))
    }
    
    
    dt <- multi.merge("^m_")
    

    【讨论】:

      【解决方案2】:

      我们可以使用reducefull_join

      library(dplyr)
      library(purrr)
      multi.merge <- function(pattern) {
              mget(ls(pattern = pattern, envir = .GlobalEnv), envir = .GlobalEnv)  %>%
                    reduce(full_join)
        }
      
      dt <- multi.merge("^m_")
      

      数据

      m_table1 <- structure(list(col1 = 1:5), class = "data.frame", row.names = c(NA, 
      -5L))
      
      m_table2 <- structure(list(col1 = 2:7, value = c(0.620061606036922, -0.833792752750578, 
      -0.939990781455841, 0.00275725433910228, 1.40140753383493, 0.708695548097395
      )), class = "data.frame", row.names = c(NA, -6L))
      

      【讨论】:

      • 这会返回:错误:.x 是空的,并且没有提供.init 我的正则表达式模式可能有问题吗?我有要匹配的表,例如“m_table1”、“m_table2”。这应该是正确的? @akrun
      • 你可以试试multi.merge("^m_table\\d+$")
      猜你喜欢
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2020-07-17
      • 2016-11-10
      • 2017-03-31
      • 2022-01-05
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多