使用R语言中的省略号将参数传递给嵌套函数

时间:2016-10-20 13:28:11

标签: r

按照一个教程(用我的母语),我尝试编写一个函数decorate_string,它将能够执行此操作:

decorate_string(pattern = "123", "abc")            # "123abc321"
decorate_string(pattern = "123", "abc", "def")     # "123abc def321"
decorate_string(pattern = "123", c("abc", "def"))  # "123abc321" "123def321"
decorate_string(pattern = "123", "abc", "def", sep = "+")    # "123abc+def321"
decorate_string(pattern = "!", c("x", "x"), collapse = "_")  # "!x_x!"
decorate_string(pattern = ".:", 1:2, 3:4, 5:6, sep = "&")    # ".:1&3&5:." ".:2&4&6:." (вектор длины 2)

要短暂:它用字符串折叠字符串并将其与左侧的图案和右侧的反转图案分开。

我已经这样做了:

decorate_string <- function(pattern, ...) { 
  fock <- function(x, pattern, rev_pat){
    x <- paste(pattern, x, rev_pat, collapse = "")
    return(x)
  }
  rev_pat <- paste(rev((strsplit(pattern,NULL))[[1]]), collapse = "")
  #a <- paste0(..., sep=" ")
  a <- sapply(paste(..., sep=" "), fock)
  return(a)
}

但是它告诉我,那个参数sep对应于severel参数。我想,它试图在嵌套函数中传递sep参数,对吧?但是嵌套函数不会要求这个参数!我不希望fock函数接收我的参数。我只想sapply收到这个参数!我该怎么办?感谢

2 个答案:

答案 0 :(得分:0)

正如@Dason提出的那样:&#34; 我从来没有说过fock功能。这不是问题所在。问题出在您的第{{1}}行。在该粘贴语句中,有一个sep通过点传入,然后指定另一个sep。您需要手动从点列表中删除sep,或者让它成为传入的不同参数,在这种情况下,它永远不会以点列表开头,以#34;

答案 1 :(得分:0)

我不确定问题的作者是否正确理解了操作员的工作(...)

decorate_string <- function(pattern, ...) {
   paste0(pattern, paste(...), stringi::stri_reverse(pattern))}