После одного учебника (в моем родном языке), я пытаюсь написать функцию decorate_string
, которая будет в состоянии сделать это:Передача аргументов вложенных функций с эллипсов на языке R
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)
БЫТЬ SHORT: он разрушает строки с помощью сепарера и разделяет его с рисунком слева и обратным рисунком справа.
Я сделал это:
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
, чтобы получить этот параметр !! Что я должен делать? Спасибо
Добавить sep как параметр в вашей функции. Таким образом, он не включен в список точек. – Dason
@Dason Извините, это было мое плохо! Я НЕ хочу, чтобы вложенная функция получала этот параметр! Я хочу, чтобы 'sep' использовался один раз в' sapply'! –
Нет, проблема заключается в том, что если у вас нет параметра sep в качестве параметра, он передается в список точек. Поэтому, когда вы используете пасту (..., sep = "), это похоже на то, что вы говорите' paste (что-то, sep = ",", sep = "") ', поэтому вы получаете ошибку, потому что R например «зависание», вы не можете дважды использовать параметр sep ». Но если вы определите его как параметр в исходной функции, то он не будет включен в список точек. – Dason