【发布时间】:2017-03-02 12:54:08
【问题描述】:
按照一个教程(用我的母语),我正在尝试编写一个函数 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 的论点对应于严格的论点。我猜,它也尝试在嵌套函数中传递 sep 参数,对吧?但是嵌套函数不要求这个参数!我不希望 fock 函数接收我的参数。我只想sapply 收到这个参数!!我该怎么办?谢谢
【问题讨论】:
-
在函数中添加 sep 作为参数。这样它就不会包含在点列表中。
-
@Dason 对不起,那是我的错!我不希望嵌套函数接收这个参数!我希望
sep在sapply中使用一次! -
不,问题是如果你没有 sep 作为参数,那么它会被传递到点列表中。因此,当您使用 paste(..., sep = " ") 时,就像您在说
paste(something, sep =",", sep=" ")一样,所以您会收到错误,因为 R 就像“挂断您不能尝试使用 sep 参数两次”。但是,如果您将其定义为原始函数中的参数,那么它将不会包含在点列表中。 -
我要补充一点,我真的没有深入了解你在做什么,但这似乎是你遇到的问题。
-
@Dason 先生,你确定吗,你明白,我不希望
sep进入fock函数。但是如果我在fock中初始化sep,这将使sep的值能够改变!
标签: r