将有趣的arg /省略号中的所有内容折叠成字符串

时间:2018-06-14 14:43:38

标签: r functional-programming

我的功能需要进行什么reg_sort

所以那个电话:

reg_sort(-"\\w","\\w$","\\d+")

返回:( 期望的结果

"-\"\\w\",\"\\w$\",\"\\d+\""

我的功能:(评论是我不成功的尝试)

reg_sort <- function(...) {

    #reg_list <- toString(x=...)
    #reg_list <- substitute(...)
    #reg_list <- deparse(...)
    #reg_list <- deparse(substitute(...))
    #reg_list <- quote(...)
    #reg_list <- as.name(substitute(...))

    return(reg_list)
    }

非常接近:(这样的事情对我来说已经有用了。如果你有其他选择,我很高兴见到)

reg_sort <- function(...) {
    reg_list <- toString(match.call()) %>% sub(".*?,","",.) %>% gsub("\\\\","\\",.,fixed=T) %>% trimws

    return(reg_list)
    }
reg_sort(-"\\w","\\w$","\\d+")
#[1] "-\"\\w\", \\w$, \\d+"

2 个答案:

答案 0 :(得分:4)

将省略号参数作为单个逗号连接字符串返回。

reg_sort <- function(...) {
    ellipsis <- sapply(as.list(substitute(list(...)))[-1], deparse, simplify="array")
    return(paste0(ellipsis, collapse=','))
}

示例:

> reg_sort( -"\\w", "\\w$", "\\d+")
[1] "-\"\\\\w\",\"\\\\w$\",\"\\\\d+\""

请注意,所需输出中的转义不正确 - 您还需要转义反斜杠文字。我们可以使用cat()查看底层字符串,而不需要额外的R转义层:

> cat(reg_sort( -"\\w", "\\w$", "\\d+"))
-"\\w","\\w$","\\d+"

我们可以看到这是原始参数,包括减号。空白是无法挽回的AFAIK。

答案 1 :(得分:0)

如果您能够在双引号之间传递减号,则以下内容将执行您想要的操作。

reg_sort <- function(...){
  f <- function(x, y) paste(x, y, sep = "\",\"")
  Reduce(f, list(...))
}

reg_sort("\\w","\\w$","\\d+")
#[1] "\\w\",\"\\w$\",\"\\d+"

reg_sort("-","\\w","\\w$","\\d+")
#[1] "-\",\"\\w\",\"\\w$\",\"\\d+"]