按照一个教程(用我的母语),我尝试编写一个函数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
收到这个参数!我该怎么办?感谢
答案 0 :(得分:0)
正如@Dason提出的那样:&#34; 我从来没有说过fock功能。这不是问题所在。问题出在您的第{{1}}行。在该粘贴语句中,有一个sep通过点传入,然后指定另一个sep。您需要手动从点列表中删除sep,或者让它成为传入的不同参数,在这种情况下,它永远不会以点列表开头,以#34;
答案 1 :(得分:0)
我不确定问题的作者是否正确理解了操作员的工作(...)
decorate_string <- function(pattern, ...) {
paste0(pattern, paste(...), stringi::stri_reverse(pattern))}